我有一个需要大型二维数组的小型 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/