我尝试将堆栈大小限制为5096字节,并将/ STACK:5096选项传递给链接器(VS2010)。编译后我检查二进制文件,可选标题中的SizeOfStackReserve确实是5096。
然后我尝试测试它并编写以下简单程序:
#include <iostream>
int main()
{
char a[60000]; // should cause stack overflow
std::cout << a[59999] // just to be sure, that a is not optimized away
return 0;
}
为什么在这种情况下我没有堆栈溢出?
答案 0 :(得分:1)
我虽然堆栈分配粒度是相同的页面大小。然而,事实证明这是错误的,我的系统(Win7 64位)的粒度是64Kb。因此,如果指定较小的堆栈大小,则忽略它。