【问题标题】:Increasing stack size for C program in Clion在 Clion 中增加 C 程序的堆栈大小
【发布时间】:2017-09-05 17:15:20
【问题描述】:

如何为具有深度递归调用的 C 程序增加堆栈的最大大小?项目是否有任何配置可以指定可执行文件的堆栈或堆大小?

【问题讨论】:

  • 如果这是在 Linux 或其他 *nix 操作系统上,那么您可以在代码中设置堆栈大小 - 有关代码,请参阅 this question and answer
  • 我在 Windows 上使用 Cygwin 环境进行操作
  • 相信cygwin也支持getrlimit/setrlimit,所以建议试试看。
  • 当然你可能需要调整kStackSize——你认为你的程序需要多少堆栈空间?
  • 初始线程堆栈大小由链接器设置。您可以要求链接器在构建时增加它。

标签: c windows cygwin clion


【解决方案1】:

检查初始堆栈大小

peflags -x <binary>

设置大小

peflags -x<size> <binary>

作为参考peflags --help
https://cygwin.com/ml/cygwin/2013-08/msg00318.html

【讨论】:

    【解决方案2】:

    我通过在项目的CMakeList.txt 中添加以下链接器标志解决了这个问题

    MATH(EXPR stack_size "16 * 1024 * 1024") # 16 Mb
    set(CMAKE_EXE_LINKER_FLAGS "-Wl,--stack,${stack_size}")
    

    【讨论】:

    • 这对我也有用。请注意,这也可以使用target_link_libraries()set_target_properties() 来完成,如here 所示。
    • @GumbyTheGreen,不错的解决方案。您是否考虑过将其发布为答案,以便我可以接受它,而不是自私地接受我自己的解决方案:)
    • 完成。改变你自私的方式永远不会太晚...... :) 不,我实际上发现你的回答也很有帮助,现在我在自己的脚本中使用这个数学表达式。
    【解决方案3】:

    为了扩展 OP 自己的答案,以下三个 CMake 命令都适用于带有 MinGW/GCC 的 Windows(将 &lt;target&gt; 替换为您输入的 add_executable()):

    target_link_libraries(<target> PRIVATE "-Wl,--stack,10000000")
    

    set_target_properties(<target> PROPERTIES LINK_FLAGS -Wl,--stack,10000000)
    

    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--stack,10000000")
    

    根据CMake documentation,每个都应该只添加链接器标志,而不是替换任何已经设置的标志。

    在 Visual Studio 中,您应该根据this thread 和其他方法,在其中的每一个中将-Wl,--stack, 替换为/STACK:。例如:

    target_link_libraries(<target> PRIVATE "/STACK:10000000")
    

    【讨论】:

      猜你喜欢
      • 2017-03-02
      • 1970-01-01
      • 2015-11-22
      • 2010-11-24
      • 2015-08-14
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 2012-04-18
      相关资源
      最近更新 更多