为什么在释放我分配的数据后内存使用量没有减少?

时间:2012-11-21 12:49:13

标签: c memory free

我创建了一个包含1,000,000个项目的链表,占用了16M内存。然后我删除并释放了其中一半。我认为内存使用会减少,但事实并非如此。

为什么会这样?

我正在通过Mac OS X 10.8.2上的活动监视器检查内存使用情况。

如果您想查看我的代码here it is

1 个答案:

答案 0 :(得分:4)

一般来说,free不会将内存释放回操作系统。它仍然分配给该进程,因此操作系统将其报告为已分配。从您的程序的POV,它可以满足您的新分配。

请注意,由于您释放了所有其他节点,因此您的内存现在几乎可以肯定是非常分散的。这个空闲内存是小块,在它们之间分配了内存,因此只能用于满足小分配。如果进行更大的分配,该过程将转到操作系统以获得更多内存。

由于进程一次从一个页面获取内存,即使它想要它也不能将这样的碎片内存释放回操作系统。你正在使用每一页的一部分。