我需要分配一个相当大的内存块(或多块) - 几千兆字节。但是,如果我尝试分配一个浮动阵列超过5.32元素(〜2 GB),我得到一个运行时错误:动态内存分配的限制
terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc
这是确定的:
float* d = new float[532000000];
但这是坏的(bad_alloc的除外):
float* d = new float[533000000];
然后我试图分配另一个阵列除了第一个。发现第二个float阵列的最大尺寸为元件(〜748Mb)。
这是确定的:
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,内存 - 8GB(〜6.5 GB可用)
您正在32位或64位平台上运行吗? –
看起来像一个地址空间碎片问题。这强烈暗示它是一个32位平台。 – Mysticial
@OliCharlesworth,32位(添加到主题) – gorill