我正在使用visual studio 2008进行开发。我的程序需要处理大量内存。当我的程序尝试分配512M浮点数组时,会发生错误。代码如下:
int size = 512*512*512;
float *buffer = new float[size];
在此分配之前,该程序已经消耗了大约554M内存。我的桌面有4G主内存,我使用的是Windows XP 32位。
如何避免分配错误?非常感谢您的投入!
答案 0 :(得分:4)
您的阵列需要过多的连续内存。您的程序可用的虚拟内存少了2千兆字节,但是地址空间被代码块,数据和各种堆破坏了。内存是从这些块之间的空闲空间分配的。在32位操作系统上,立即分配时可以获得~650 MB。当程序开始使用内存时,这就是南方。所有内存分配的总和仍然是~2GB。
使用64位操作系统或对数据结构进行分区。 SysInternals的VMMap实用程序可以让您深入了解程序的虚拟内存映射。