2010-12-08 71 views
2

我的机器有8GB的RAM,并运行Windows Server 2008 的malloc/realloc()的无法分配更多的内存时,我的应用程序已经分配1.5〜1.7GB。我尝试切换到而不是HeapAlloc/HeapRealloc,并发生相同的情况。的realloc/HeapReAlloc的失败eventhough足够的内存可用

有什么我在这里失踪?有什么可能导致我的应用程序无法分配更多的内存时,有明确的RAM可用?

+0

你试图获得多少内存?你的应用程序是32位还是64位? – thkala 2010-12-08 09:33:11

+0

Windows是64Bit,我的应用程序是32Bit。它不太可能是碎片问题,因为我上次调试它时,尝试将〜7MB块重新分配到〜9MB块时失败,并且可用内存大约为5GB。 – 2010-12-08 09:40:49

回答

1

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

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

当然,给你提供的数据稀疏(多少是你想发生这种情况时,要重新页头?这是一个32位或64位应用程序吗?),有可能是其他问题也是如此。

2

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

4

它只是无关紧要你的机器有多少RAM。 Windows上的每个32位进程都会获得一个4GB的地址空间,其中2GB在用户地址空间中可用。所以你的程序的内存(包括它的代码,dll加载,堆栈等)将只从这个空间分配。由于您接近虚拟地址空间的限制,因此内存分配失败。

相关问题