c++ - 错误 : Total size of array must not exceed 0x7fffffff bytes

标签 c++ arrays visual-studio memory 64-bit

我有一个需要大型二维数组的小型 C++ 程序。

int distanceArray[282][9900000];

我知道,由于 32 位应用程序的 2GB 上限,标准的 32 位控制台应用程序将无法为我的进程分配这么多内存。然而,尽管我已将编译器配置为使用 native amd64 工具集,但在尝试构建我的应用程序时,我仍然遇到相同的错误:

Error   C2148   total size of array must not exceed 0x7fffffff bytes

我的系统上有 16GB 的 RAM,所以我知道我的物理内存应该不是问题。如果我的计算是正确的,这应该只占用大约 3GB。但是,我不明白为什么我似乎无法让 64 位编译器正常工作。我已按照 Microsoft's website 上的说明进行操作概述了如何使用 64 位编译器,但无论我做什么,我都会收到同样的错误。任何帮助将不胜感激。谢谢!

我知道以前有人问过这个问题,但现有的答案对我没有帮助。感谢您尝试帮助我找到我的问题。

最佳答案

Windows 上使用的 64 位 PECOFF 可执行文件格式不支持创建加载大小大于 2GB 的可执行文件,因此您不能创建大于 2GB 的静态分配对象。如果您尝试使用自动分配的对象在堆栈上创建这样的对象,您会遇到类似的问题。

一个可能的解决方案是动态分配对象:

int (*distanceArray)[9900000] = (int (*)[9900000]) calloc(282, 9900000);

或者,如果您希望它更像 C++,并且不需要像静态分配的数组那样将其初始化为零:

int (*distanceArray)[9900000] = new int[282][9900000];

关于c++ - 错误 : Total size of array must not exceed 0x7fffffff bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42173040/

相关文章:

c++ - 自动错误报告 - 建议?

php - 来自 HTTP 请求的 $_POST 数组值

python - 有没有办法通过将 python 列表快速转换为 numpy 矩阵来搜索列表?

c++ - 是否允许三元运算符在 C++ 中计算两个操作数?

c# - 如何从另一个项目添加对共享代码项目 (.shproj) 的引用

c++ - 将类构造函数重载放在同一类的另一个重载中

c++ - GLSL 截断符号距离表示 (TSDF) 实现

c++ - 使用另一个数组的值初始化本地静态常量数组

.net - F#中的数组协方差

c++ - 程序在具有有效用户定义对象的 Skill.h 文件中生成 "error C4430: missing type specifier - int assumed."错误消息