[内存分配问题]未处理的异常:Microsoft C ++异常:内存位置的std :: bad_alloc

时间:2010-09-13 16:47:23

标签: c++ visual-studio-2008 memory-management

我正在使用visual studio 2008进行开发。我的程序需要处理大量内存。当我的程序尝试分配512M浮点数组时,会发生错误。代码如下:

int size = 512*512*512;
float *buffer = new float[size];

在此分配之前,该程序已经消耗了大约554M内存。我的桌面有4G主内存,我使用的是Windows XP 32位。

如何避免分配错误?非常感谢您的投入!

1 个答案:

答案 0 :(得分:4)

您的阵列需要过多的连续内存。您的程序可用的虚拟内存少了2千兆字节,但是地址空间被代码块,数据和各种堆破坏了。内存是从这些块之间的空闲空间分配的。在32位操作系统上,立即分配时可以获得~650 MB。当程序开始使用内存时,这就是南方。所有内存分配的总和仍然是~2GB。

使用64位操作系统或对数据结构进行分区。 SysInternals的VMMap实用程序可以让您深入了解程序的虚拟内存映射。