c++ - 函数的堆栈分配

标签 c++ memory stack overflow allocation

如以下 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/

相关文章:

c++ - 使用 google breakpad 注册异常处理程序时出现总线错误

c++ - 如何插入std::map?

python - Python中的二维列表重复随机数赋值

c - 某些对 "calloc"的调用速度快得令人怀疑

java - 使用Throwable进行异常以外的操作

java - 需要修复的Infix程序的后缀

c++ - 新 arg 在不同的 arg 上生成错误

c++ - 是否可以指定一个可选的返回类型并在未指定的情况下推断它?

c++ - 为什么删除分配的数组会导致内存错误?

c# - 将方法添加到通用堆栈时出现问题?