1

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

那是为什么?

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

如果你想检查我的代码,这里是.

4

1 回答 1

4

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

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

由于该进程一次从操作系统获取一页内存,因此即使它想要它也无法将这些碎片化的内存释放回操作系统。您正在使用每个页面的一部分。

于 2012-11-21T12:53:57.500 回答