Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我创建了一个包含 1,000,000 个项目的链表,占用了 16M 内存。然后我删除并释放了其中的一半。我以为内存使用量会减少,但事实并非如此。
那是为什么?
我正在通过 Mac OS X 10.8.2 上的活动监视器检查内存使用情况。
如果你想检查我的代码,这里是.
一般来说,free不会将内存释放回操作系统。它仍然分配给进程,因此操作系统将其报告为已分配。从您的程序的 POV 来看,它可以满足您所做的新分配。
free
请注意,由于您释放了所有其他节点,因此几乎可以肯定您的内存现在非常碎片化。这个空闲内存是小块,它们之间有分配的内存,所以只能用于满足小分配。如果您进行更大的分配,该进程将转到操作系统以获得更多内存。
由于该进程一次从操作系统获取一页内存,因此即使它想要它也无法将这些碎片化的内存释放回操作系统。您正在使用每个页面的一部分。