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

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

我是 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/

相关文章:

C++:ToUnicode 函数上的 SIGSEGV (windows)

delphi - 如何非常快速地生成具有不同 "branch"长度的二维数组

c++ - 创建一个 boolean 函数来确定两个数组是否移位等效

c++ - 为什么我的模型使用了天空盒的纹理?

c++ - 矩形算法中的多边形?

c++ - 运算符重载+动态矩阵

c++ - "bad_alloc"方法调用时抛出异常

c++ - 每当动态分配内存时,您是否总是必须检查 bad_alloc?

c++ - 使用指针新建和删除