即使有足够的内存可用,realloc / Heap Realloc也会失败

时间:2010-12-08 09:28:26

标签: c++ dynamic-memory-allocation

我的计算机有8GB内存且运行的是Windows Server 2008. malloc / realloc()在我的应用程序已经分配了1.5~1.7GB时无法分配更多内存。我尝试切换到 HeapAlloc / HeapRealloc ,但同样的情况也会发生。

我在这里缺少什么吗?什么可能导致我的应用程序在有明显可用内存时无法分配更多内存?

3 个答案:

答案 0 :(得分:4)

您的机器中有多少RAM并不重要。 Windows上的每个32位进程都有4GB的地址空间,其中2GB可用于用户地址空间。因此,程序的内存(包括其代码,加载的dll,堆栈等)将仅从此空间分配。由于您接近虚拟地址空间的限制,因此内存分配失败。

答案 1 :(得分:2)

默认情况下,在Windows 32位操作系统上,您可以将2DB用于一个进程。如果使用MSVC编译器,则必须设置LARGEADDRESSAWARE选项。

答案 2 :(得分:1)

  

什么可能导致我的应用程序在有明显可用内存时无法分配更多内存?

堆碎片 。分配不仅仅是要求记忆。它要求一段连续的记忆。

当然,考虑到你提供的稀疏数据( 多少 你试图在发生这种情况时重新分配?)这是 32bit或64位 应用程序?),也可能存在其他问题。