【发布时间】:2017-06-29 14:35:12
【问题描述】:
我有一个需要大型二维数组的小型 C++ 程序。
int distanceArray[282][9900000];
我知道,由于 32 位应用程序的 2GB 上限,标准的 32 位控制台应用程序将无法为我的进程分配这么多内存。但是,尽管我已将编译器配置为使用本机 amd64 工具集,但在尝试构建应用程序时仍然会遇到相同的错误:
Error C2148 total size of array must not exceed 0x7fffffff bytes
我的系统上有 16GB 的 RAM,所以我知道我的物理内存应该不是问题。如果我的计算是正确的,这应该只占用大约 3GB。但是,我不明白为什么我似乎无法让 64 位编译器正常工作。我遵循了Microsoft's website 上的说明,其中概述了如何使用 64 位编译器,但无论我做什么,我都会收到同样的错误。任何帮助将不胜感激。谢谢!
我知道以前有人问过这个问题,但现有的答案对我没有帮助。感谢您尝试帮助我找到我的问题。
【问题讨论】:
-
你的堆栈可能溢出了。这与进程的总可用内存不同。请改用
std::vector<std::vector<int>>或其他名称。 -
这通常不会在运行时导致错误吗?我什至无法正确编译。
-
那似乎是编译器特定的事情。我无法复制here。您可能应该添加有关您的特定开发环境的标签和说明。
-
不管怎样,如果你让它在这种状态下运行,它肯定会非常严重地溢出堆栈。
-
Here's why,使用new[]来分配。
标签: c++ arrays visual-studio memory 64-bit