我似乎发现我的程序(使用mingw的g++
建立)由于栈内存不足而崩溃。我使用编译选项-Wl,--stack,64000000
来增加堆叠限制,但问题仍然存在。我想知道是否有一种实用程序或方法来检查我的.exe
程序当前的堆叠限制,以便我可以验证限制是否确实更改为该值。
我似乎发现我的程序(使用mingw的g++
建立)由于栈内存不足而崩溃。我使用编译选项-Wl,--stack,64000000
来增加堆叠限制,但问题仍然存在。我想知道是否有一种实用程序或方法来检查我的.exe
程序当前的堆叠限制,以便我可以验证限制是否确实更改为该值。
dumpbin
。通常有一个脚本可以运行,以带有所有Visual Studio工具路径的命令提示符窗口,这是vcvarsall.bat或“x64 Native Tools Command Prompt for VS 2019”(或类似的)从开始菜单中选择。
运行
dumpbin /headers executable.exe
这将返回一长串输出。在该输出中,寻找 OPTIONAL HEADER VALUES
部分,并找到其中的 size of stack reserve
。默认的堆栈大小被写成 100000
(十六进制),即1兆字节。
您可以使用 Visual Studio 提供的 editbin
来更改可执行文件的堆栈大小:
editbin /stack:N executable.exe
此处的N是堆栈大小以字节为单位计算的数值。
dumpbin
输出的是十六进制的堆栈大小,而 editbin
则以十进制形式接受堆栈大小。 - Roland Pihlakas
readelf
、nm
、objdump
等(请参见https://dev59.com/nI_ea4cB1Zd3GeqPJAyT)。此外,请注意,您可能会遇到其他堆栈限制约束,因为它不是可执行文件的属性,而是环境(操作系统、shell等)的属性。在使用`bash`的Unix系统上,可以调用`ulimit -s`来获取当前堆栈大小限制。最后,您是否使用GNU链接器? - Vladislav Ivanishin