对于有深度递归调用的C程序,如何增加栈的最大大小?项目是否有配置文件可以指定可执行文件的栈或堆大小?
vqlkdk9b1#
我通过在项目的CMakeList.txt中添加以下链接器标志解决了这个问题
CMakeList.txt
MATH(EXPR stack_size "16 * 1024 * 1024") # 16 Mb set(CMAKE_EXE_LINKER_FLAGS "-Wl,--stack,${stack_size}")
4si2a6ki2#
为了扩展OP自己的答案,下面三个CMake命令对我来说都适用于带有MinGW/GCC的Windows(将<target>替换为您在add_executable()中输入的内容):
<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")
根据CMake documentation,其中的每一个都应该只添加链接器标志,而不是替换任何已经设置的标志。在Visual Studio中,应根据this thread和其他条件,将其中的-Wl,--stack,替换为/STACK:。例如:
-Wl,--stack,
/STACK:
target_link_libraries(<target> PRIVATE "/STACK:10000000")
2mbi3lxu3#
检查初始堆栈大小
peflags -x <binary>
定尺寸
peflags -x<size> <binary>
作为参考peflags --help和https://cygwin.com/ml/cygwin/2013-08/msg00318.html
peflags --help
bvuwiixz4#
在macos(os x)或linux上使用-stack_size类似于:set(CMAKE_EXE_LINKER_FLAGS "-Wl,-stack_size,4000000")
-stack_size
set(CMAKE_EXE_LINKER_FLAGS "-Wl,-stack_size,4000000")
4条答案
按热度按时间vqlkdk9b1#
我通过在项目的
CMakeList.txt
中添加以下链接器标志解决了这个问题4si2a6ki2#
为了扩展OP自己的答案,下面三个CMake命令对我来说都适用于带有MinGW/GCC的Windows(将
<target>
替换为您在add_executable()
中输入的内容):或
或
根据CMake documentation,其中的每一个都应该只添加链接器标志,而不是替换任何已经设置的标志。
在Visual Studio中,应根据this thread和其他条件,将其中的
-Wl,--stack,
替换为/STACK:
。例如:2mbi3lxu3#
检查初始堆栈大小
定尺寸
作为参考
peflags --help
和https://cygwin.com/ml/cygwin/2013-08/msg00318.html
bvuwiixz4#
在macos(os x)或linux上使用
-stack_size
类似于:set(CMAKE_EXE_LINKER_FLAGS "-Wl,-stack_size,4000000")