c++ 即使有足够的内存可用,realloc()/HeapRealloc()也会失败

mqxuamgl  于 2022-11-27  发布在  其他
关注(0)|答案(3)|浏览(109)

我的计算机有8 GB的RAM,运行的是Windows Server 2008。当我的应用程序已分配了1.5~1.7GB内存时,malloc()/realloc()无法分配更多内存。我尝试切换到HeapAlloc()/HeapRealloc(),但还是发生了同样的情况。
我是否遗漏了什么?是什么原因导致我的应用程序在有明显可用的RAM时无法分配更多的内存?

mkh04yzy

mkh04yzy1#

你的机器有多少内存并不重要。Windows上的每个32位进程都有一个4GB的地址空间,其中2GB是用户地址空间。所以你的程序的内存(包括它的代码,加载的dll,堆栈等)将只从这个空间分配。因为你已经接近虚拟地址空间的极限,内存分配失败了。

pu82cl6c

pu82cl6c2#

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

l7wslrjt

l7wslrjt3#

当有明显可用的RAM时,是什么原因导致我的应用程序无法分配更多内存?

堆碎片。分配不只是要求内存。它要求连续的内存块。

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

相关问题