如何知道.exe程序的堆栈大小限制?

How to know the stack size limit of .exe program?

我的程序(使用 mingw g++ 构建)似乎由于堆栈内存不足而崩溃。我使用编译选项 -Wl,--stack,64000000 来增加堆栈限制,但问题仍然存在。我想知道是否有实用程序或方法来检查我的 .exe 程序的当前堆栈限制,以便我可以验证该限制确实已更改为该值。

从此 answer,要检查堆栈大小,您需要安装 Visual Studio 并使用 visual studio 工具 dumpbin。通常有一个脚本可以 运行 带来命令提示符 windows 和路径中的所有 visual studio 工具,这是 vcvarsall.bat 或“x64 Native Tools Command Prompt for VS 2019”(或类似的东西)从开始菜单。

运行

dumpbin /headers executable.exe

这将 return 长输出。在该输出中,查找 OPTIONAL HEADER VALUES 并且在该部分中,将有一个 size of stack reserve 。默认堆栈大小写为 100000(字节),即 1 兆字节。

您可以使用 editbin 更改可执行文件的堆栈大小,也由 Visual Studio 提供:

editbin /stack:N executable.exe

这里 N 是堆栈大小的字节数。