【发布时间】:2013-09-28 23:36:03
【问题描述】:
我需要分配相当大的内存块(或多个块)- 几 GB。但是,如果我尝试分配一个包含超过 532000000 个元素(~2 Gb)的 float 数组,则会出现运行时错误:
在抛出 'std::bad_alloc' 的实例后调用终止 什么():std::bad_alloc
没关系:
float* d = new float[532000000];
但这很糟糕(bad_alloc 例外):
float* d = new float[533000000];
然后我尝试分配除第一个数组之外的另一个数组。发现第二个 float 数组的最大大小为 195000000 个元素(~748 Mb)。
没关系:
float* d = new float[532000000];
float* e = new float[196000000];
这很糟糕:
float* d = new float[532000000];
float* e = new float[197000000];
我想知道在应用程序中分配的内存有哪些限制以及如何避免这些限制?如何使用虚拟内存?
我的系统 - 32 位 ubuntu 12.10,编译器 - gcc 4.7,RAM - 8GB(约 6.5 Gb 可用)
【问题讨论】:
-
您是在 32 位还是 64 位平台上运行?
-
看起来像地址空间碎片问题。这强烈表明它是一个 32 位平台。
-
@OliCharlesworth,32 位(添加到主题中)
标签: c++ memory memory-management heap-memory