Bad Alloc具有200GB可用内存c ++

时间:2015-05-12 02:52:57

标签: c++ dynamic-arrays bad-alloc mingw-w64

我是C ++的新手,我正在学习压缩感应'所以我需要使用巨大的矩阵,MATLAB实际上很慢,所以我用C ++编写算法。

问题是我存储大数组(大约100Mb-1Gb)。它们大约是20个阵列。它可以正常使用30 Gb内存,但是当进程需要超过40Gb时,它就会停止。我认为这是一个内存问题,我在Linux和Windows上测试过(OS 64位 - 编译器64位MinGW - 200Gb Ram - intel Xeon)有没有限制?。

size_t tm=n*m*l;
double *x=new double[tm];

我使用了大约20个像这样的阵列。 n,m~ = 1000且L~ = 30通常是这些尺寸。

谢谢

1 个答案:

答案 0 :(得分:3)

20个阵列,总共使用40 GB内存的问题 - 这表明当阵列超过2 GB时程序会中断。这不应该发生,64位地址空间应该使用64位size_t作为对象大小。看起来MinGW错误地使用了31位大小(即丢失符号位)。

我不知道你如何分配内存,但这可能是通过绕过破坏的分配例程并直接进入OS分配器来解决的。例如。对于Windows,您可以调用VirtualAlloc(跳过HeapAlloc,它不是为这么大的分配而设计的)。