我的机器有8GB的RAM,并运行Windows Server 2008 的malloc/realloc()的无法分配更多的内存时,我的应用程序已经分配1.5〜1.7GB。我尝试切换到而不是HeapAlloc/HeapRealloc,并发生相同的情况。的realloc/HeapReAlloc的失败eventhough足够的内存可用
有什么我在这里失踪?有什么可能导致我的应用程序无法分配更多的内存时,有明确的RAM可用?
我的机器有8GB的RAM,并运行Windows Server 2008 的malloc/realloc()的无法分配更多的内存时,我的应用程序已经分配1.5〜1.7GB。我尝试切换到而不是HeapAlloc/HeapRealloc,并发生相同的情况。的realloc/HeapReAlloc的失败eventhough足够的内存可用
有什么我在这里失踪?有什么可能导致我的应用程序无法分配更多的内存时,有明确的RAM可用?
什么可能导致我的应用程序无法分配更多的内存时,有明确的RAM可用?
堆碎片。分配不只是要求记忆。它要求一段连续的记忆。
当然,给你提供的数据稀疏(多少是你想发生这种情况时,要重新页头?这是一个32位或64位应用程序吗?),有可能是其他问题也是如此。
默认情况下,在Windows 32位操作系统上,您可以对一个进程使用2DB。如果你使用MSVC编译器,你必须设置LARGEADDRESSAWARE选项。
它只是无关紧要你的机器有多少RAM。 Windows上的每个32位进程都会获得一个4GB的地址空间,其中2GB在用户地址空间中可用。所以你的程序的内存(包括它的代码,dll加载,堆栈等)将只从这个空间分配。由于您接近虚拟地址空间的限制,因此内存分配失败。
你试图获得多少内存?你的应用程序是32位还是64位? – thkala 2010-12-08 09:33:11
Windows是64Bit,我的应用程序是32Bit。它不太可能是碎片问题,因为我上次调试它时,尝试将〜7MB块重新分配到〜9MB块时失败,并且可用内存大约为5GB。 – 2010-12-08 09:40:49