我需要分配相当大的内存块(或多个块) - 几 GB。但是,如果我尝试分配超过532000000 个元素(~2 Gb)的浮点数组,则会出现运行时错误:
在抛出 'std::bad_alloc' what() 的实例后调用终止:std::bad_alloc
还行吧:
float* d = new float[532000000];
但这很糟糕(bad_alloc异常):
float* d = new float[533000000];
然后我尝试分配除第一个数组之外的另一个数组。发现第二个浮点数组的最大大小为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 可用)