如何仅为特定C++可执行文件增大栈大小以解决递归执行中断问题
针对单个C++可执行文件调整栈大小的方法
嗨,这个问题我太熟了!不用给账号下所有应用增大栈大小,只针对单个C++可执行文件调整完全可行,分不同平台给你说具体操作:
Linux/Unix 平台
有两种实用方法,按需选择:
- 编译阶段直接指定:用GCC或Clang编译时,通过链接器参数设置栈大小,格式是
-Wl,--stack,字节数。比如要设置8MB的栈(1MB=1048576字节,8MB就是8388608),完整编译命令如下:g++ -o my_program my_program.cpp -Wl,--stack,8388608 - 运行时临时调整:如果已经编译好可执行文件,不想重新编译,可以用
ulimit命令临时修改当前shell会话的栈限制,再运行程序。单位是KB,比如设置8MB栈:
注意这个设置只对当前shell窗口里的进程生效,不会影响其他程序或者系统全局设置。ulimit -s 8192 # 8192KB = 8MB ./my_program
Windows 平台
Windows下也有两种常用操作方式:
- 编译时设置(MSVC):用MSVC命令行编译时,添加链接器选项
/STACK:预留大小[,提交大小],单位是字节。比如预留8MB栈:
要是用Visual Studio IDE开发,操作更直观:右键项目→属性→链接器→系统→栈大小,直接填入数值(比如8388608)即可,无需加单位。cl /EHsc my_program.cpp /link /STACK:8388608 - 修改已编译的EXE文件:如果已经生成了可执行文件,不想重新编译,可以用VS自带的
editbin工具修改。打开VS的开发者命令提示符,执行以下命令:editbin /STACK:8388608 my_program.exe
最后提个小建议:栈大小不用盲目设得过大,够用就好,毕竟栈是进程私有内存,太大反而会浪费资源。如果递归深度实在超出常规范围,也可以考虑把递归逻辑改成迭代实现,从根源上减少栈的依赖,这有时候比调栈大小更稳妥哦!
内容的提问来源于stack exchange,提问作者user5858
相关产品推荐
相关产品推荐

