Visual C ++运行时是否将malloc /释放内存给OS?

问题描述 投票:6回答:2

这个问题与Will malloc implementations return free-ed memory back to the system?非常相似,但是我对Windows / Microsoft Visual Studio的答案以及确切的虚拟内存状态的详细信息感兴趣。

Visual C ++ CRT free会将内存返回给系统吗?关于虚拟内存分配,内存的确切状态是什么?在大内存块上执行完空闲操作后,该块中的内存将被提交,保留还是空闲?如果免费后再致电_heapmin怎么办?

c++ c visual-studio visual-studio-2010 memory-management
2个回答
8
投票

检查2010年的源代码,可以看到malloc / free调用HeapAlloc /HeapFreeWin32 API直接起作用,并以_crtheap作为运行时创建的堆。因此,VS 2010和最新Windows版本(Win2000,WinXP,Vista,Win 7)的答案是:


2
投票

否,它不会将内存返回给“系统”。 _heapmin仅释放整个空白页面,通常效果不大。它不会在页面之间随机播放数据。因此,取决于free()和_heapmin的组合是否实际上会减少正在使用的页面数,这取决于堆内存中的释放位置。还请注意,VS使用不同的堆进行调试和发布。

© www.soinside.com 2019 - 2024. All rights reserved.