【发布时间】:2011-09-23 12:17:13
【问题描述】:
这个问题与Will malloc implementations return free-ed memory back to the system? 非常相似,但我对 Windows/Microsoft Visual Studio 的答案以及关于确切虚拟内存状态的详细信息感兴趣。
Visual C++ CRT free 会将内存返回给系统吗?关于虚拟内存分配,内存的确切状态是什么?在大内存块上做free后,块中的内存是commit,reserved,还是free?免费后打_heapmin怎么办?
【问题讨论】:
-
free将其返回给运行时分配器。之后发生的事情是分配者的决定。有时会返回系统,有时会挂起并尝试重用。 -
另外,MSVC 附带 CRT 的源代码,因此您可以自行检查并阅读它调用的 Win32 API 函数。
-
您真正应该担心的是释放您 malloc 的内存并将其他堆管理留给操作系统。
-
@C Johnson:这可能适用于许多应用程序,但并非适用于所有应用程序。在我的情况下,我需要担心虚拟内存消耗,因为应用程序使用的系统组件(即 Direct3D 资源分配,但可能还有其他一些)直接使用虚拟内存操作,而不是使用 malloc/free。如果堆耗尽了虚拟内存,则会导致无法恢复的错误,因为无论我的应用程序释放多少内存,Direct3D 仍然会因为没有可用的虚拟内存而失败。
标签: c++ c visual-studio visual-studio-2010 memory-management