【问题标题】:large 2d array in C++ (possible?)C ++中的大型二维数组(可能吗?)
【发布时间】:2016-07-15 03:45:36
【问题描述】:

我的问题很简单,如果我完全诚实的话,有很多高水平的答案已经从我的脑海中飘过。 我将从我为什么需要这个数组开始,它将被用作一个精确到毫米的二维坐标系。 我的代码如下所述,我试图在堆上定义数组(内存类型),但我没有运气。伙计们,放轻松,我今天才刚刚开始使用 C++ :)

编辑:我正在使用视觉工作室

 #include <iostream>
using namespace std;
char x [100000][100000];
int main()
{ 
}

【问题讨论】:

  • This QA 没有帮助?
  • 某些平台或编译器会对全局变量的大小进行限制。您可能需要使用动态内存(又名operator new)。
  • @LogicStuff 我在发布之前通读了该解决方案,不幸的是它没有帮助
  • @ThomasMatthews 我尝试使用运算符 new 但它不起作用。我的数组太大
  • 如果您正在构建 32 位应用程序,您的动态分配工作(我们不方便看到)也会失败。即使是动态分配,该分配也将消耗 9.3132 gB 内存,远远超出 32 位 Windows 进程的 2gB 用户空间,如果启用了扩展寻址,则为 3gB。如果这是您的计划,菜单上有 64 位进程。

标签: c++ arrays memory heap-memory


【解决方案1】:

想想内存占用

您需要 100000x100000 个连续字符

这是 10,000,000,000 字节

如果我数学好的话,93.132 GB 的 RAM。

你需要大量可怕的交换内存,因为内存超过 64GiB 的电脑在今天并不常见。

但这在大学大型机/集群上很容易实现。

我的立场是 9.3GiB,这对于超过 10GiB 的内存是可行的。

【讨论】:

  • 从这里我要消除我最初的猜测,“这太大了”是正确的?
  • 是的,但取决于您的工作内容。如果有很多本地化操作交换分页不会那么糟糕。但是您需要注意内存访问顺序,以尽量减少缓存未命中。
  • 感谢@WhozCraig,已修复
  • 这么说吧,如果 OP 不做分子建模或天气预报,那么大的数组没有理由枯萎 93GB 或 9.3GB。
  • @user3344003 我正在制作一个坐标系,理想情况下希望它精确到一毫米。我将使用每个框并说明该点的场强。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
相关资源
最近更新 更多