如以下 32 位版本所示,是否对模块/源文件中有关内存分配的函数进行了任何定量测试:
#include <windows.h>
int main()
{
wchar_t TestArray [516332] = { NULL };
}
它对 516332(或 7E0EC)成功,但对 516333 产生堆栈溢出。 当然,2Gb 或 7FFFFFFF 的全局声明是合法的,但添加一个以获得 SO。
#include <windows.h>
wchar_t TestArray [2147483647] = { NULL };
int main()
{
}
在 32 位构建中使用 VS10/MCBS,但 X64 运行不佳。在 64 位或 128 位系统中,函数类型(例如 long、char void、bool)是否按比例增加?专门使用数字/表格方法搜索答案。
最佳答案
不确定我是否答对了你的问题,但是:
int main()
{
wchar_t TestArray [516332] = { NULL };
}
这里您正在达到默认 1MB 线程堆栈大小的限制(一些其他数据也已经在堆栈中)。可以使用 Visual Studio 中的 /STACK:reserve[,commit]
调整默认大小。
wchar_t TestArray [2147483647] = { NULL };
int main()
{
}
在这里,您在 32 位系统上达到了 2GB 用户模式限制(可以使用/3GB 启动开关进行更改)。
关于c++ - 函数的堆栈分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34695775/