我创建了一个包含1,000,000个项目的链表,占用了16M内存。然后我删除并释放了其中一半。我认为内存使用会减少,但事实并非如此。
为什么会这样?
我正在通过Mac OS X 10.8.2上的活动监视器检查内存使用情况。
如果您想查看我的代码here it is。
答案 0 :(得分:4)
一般来说,free
不会将内存释放回操作系统。它仍然分配给该进程,因此操作系统将其报告为已分配。从您的程序的POV,它可以满足您的新分配。
请注意,由于您释放了所有其他节点,因此您的内存现在几乎可以肯定是非常分散的。这个空闲内存是小块,在它们之间分配了内存,因此只能用于满足小分配。如果进行更大的分配,该过程将转到操作系统以获得更多内存。
由于进程一次从一个页面获取内存,即使它想要它也不能将这样的碎片内存释放回操作系统。你正在使用每一页的一部分。