我有一个Objective-C应用程序,旨在使用WebKit视图运行一段时间。一段时间后,应用程序会建立相当多的内存,因此我希望根据请求准确地向最终用户显示内存使用情况。在OS X上的Activity Monitor中,我看到了应用程序Real Memory和Private Memory的两个内存值。从我所读到的内容中,Private是该过程所具有的一切,Real是一种估计。我应该信任什么?是否有一个特定的公式可用于计算确切的用法而不是OS X报告的内容?
不是我的专业领域。
答案 0 :(得分:4)
如果您担心内存泄漏,则应使用the various tools provided by Apple进行调试。
真实内存是进程使用的实际物理内存。
私有内存是该进程使用的物理内存。
虚拟内存是进程的整个虚拟内存的大小,包括当前未驻留在物理RAM中的那些页面。
如果您有泄漏,通过查看这些数字实际上很难说。例如,一个malloced然后泄露的块将永远不会被再次引用,因此它最终会被换出。它将成为虚拟内存的一部分,但不是驻留内存的一部分。因此,如果您有泄漏,虚拟内存将逐渐增加。
另一方面,如果malloc找不到要分配的未使用的内存块,虚拟内存将会增加,但是当free释放内存时,它不会减少。因此,如果您使用大量的RAM来增加VM,那么即使您正确地释放它,它也不会再次减少。如果你也有泄漏,malloc需要很长时间才能用完回收的VM,这意味着你可能不会注意到它。
所以,使用专门建立的泄漏检测工具。