如何增加C程序的堆栈最大大小,以便进行深度递归调用?是否有项目配置可以为可执行文件指定堆栈或堆大小?
我通过在项目的 CMakeList.txt
中添加以下链接器标志解决了这个问题。
MATH(EXPR stack_size "16 * 1024 * 1024") # 16 Mb
set(CMAKE_EXE_LINKER_FLAGS "-Wl,--stack,${stack_size}")
为了扩展原作者的回答,以下三个CMake命令在我使用MinGW/GCC的Windows上都可以正常工作(将<target>
替换为您在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")
-Wl,--stack,
替换为/STACK:
。例如:target_link_libraries(<target> PRIVATE "/STACK:10000000")
检查初始堆栈大小
peflags -x <binary>
设置大小
peflags -x<size> <binary>
peflags --help
和
getrlimit
/setrlimit
,所以建议尝试一下。 - Paul RkStackSize
- 你认为你的程序需要多少堆栈空间? - Paul R