我是 C++ 的新手,我正在研究“压缩传感”,所以我需要处理巨大的矩阵,而 MATLAB 实际上很慢,所以我用 C++ 编写了我的算法。
问题是我存储了大数组(大约 100Mb-1Gb)。它们大约是 20 个阵列。它适用于 30 Gb 的内存,但是当进程需要超过 40Gb 时它就会停止。我认为这是一个内存问题,我在 Linux 和 Windows(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,它不是为如此大的分配而设计的)。
关于c++ - 具有 200GB 可用内存的 Bad Alloc c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30180941/