Jon*_*aza 7 c++ bad-alloc dynamic-arrays 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];
Run Code Online (Sandbox Code Playgroud)
我使用大约20个像这样的阵列.n,m~ = 1000且L~ = 30这些通常是尺寸.
谢谢
20 个数组,总共使用 40 GB 内存的问题 - 这表明当数组超过 2 GB 时程序会中断。这种情况不应该发生,64 位地址空间应该使用 64 位size_t作为对象大小。看起来 MinGW 错误地使用了 31 位大小(即也丢失了一个符号位)。
我不知道如何分配内存,但这也许可以通过绕过损坏的分配例程并直接进入操作系统分配器来修复。例如,对于 Windows,您可以调用 VirtualAlloc(跳过 HeapAlloc,它不是为如此大的分配而设计的)。