使用 g++ 编译器扩大程序可用栈空间

如题,在写一些程序的时候我们有时会开一个比较大的数组或进行层数较多的 dfs。这时候,程序常常会报错(栈空间溢出),然后 return 一个 3 开头的 10 位数(错误码)。

其实,虽然 Windows 给程序的默认栈空间比较小,我们还是有办法去扩大这个程序运行栈空间的。

栈空间限制在何处?

对于 Linux,在系统设置(本文不做讨论,后续可能会补坑)

对于 Windows,在 ".exe" 可执行文件中。也即:在编译的时候决定。

Windows + g++ 扩大程序可用栈空间 方法

简单来说,就是在编译的时候加入一条形如 -Wl,--stack=SIZE 的指令即可。

SIZE 的单位:byte

例如,我要进行单文件编译,文件名为 a.cpp,给予该可执行文件最大 256MB的栈空间。

指令:

1
g++ a.cpp -o a.exe -Wl,--stack=268435456

这里有 268435456=256×1024×1024268435456 =256 \times 1024 \times 1024

IDE 说明

一般在IDE中,都会有一个设置页面叫做“编译选项”,在这里加入一句 -Wl,--stack=SIZE 即可

Bloodshed DEV-C++ 5.11 开大栈空间教程

上方工具栏 \rightarrow 工具[T] \rightarrow 编译选项[C] \rightarrow 勾选“编译时加入以下命令”并加入一句 -Wl,--stack=SIZE \rightarrow 点击下方“确定[O]”即可

附:常用编译参数

这也是一般 OI, ACM 竞赛中最常用的,能满足大多数情景。

1
-O2 -Wall -Wextra -Wl,--stack=536870912

用途如下:

  1. 打开O2优化 (-O2)
  2. 打开“显示最多警告信息” (-Wall, -Wextra)。会判断出一些语法上没错,但很可能是错误(手误)的内容,并作为警告输出
  3. 开大栈空间限制到 512MB (-Wl,--stack=536870912)

搬运自我的 cnblogs。原文链接:https://www.cnblogs.com/hkxadpall/p/gplusplus_AutoStackMemory.html