坏的Alloc与200GB内存可用C ++

我是C ++的新手,我正在研究'压缩感知',所以我需要处理巨大的矩阵,而MATLAB实际上很慢,所以我使用C ++编写了我的算法。

问题是我存储大阵列(大约100Mb-1Gb)。 他们约20个阵列。 并且它在30 Gb的内存下工作正常,但是当进程需要超过40 Gb时,它会停止。 我认为这是一个内存问题,我在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,这些通常是尺寸。

谢谢


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

我不知道你是如何分配内存的,但是这可以通过绕过破坏的分配例程并直接进入操作系统分配器来解决。 例如,对于Windows,您可以调用VirtualAlloc(跳过HeapAlloc,它不适用于这样大的分配)。

链接地址: http://www.djcxy.com/p/26131.html

上一篇: Bad Alloc with a 200GB memory available c++

下一篇: Android camera: Threads? Which should do what