真实内存 VS。私人内存

Joh*_*ohn 4 memory macos

我有一个 Objective-C 应用程序,旨在使用 WebKit 视图长时间运行。经过一段时间后,应用程序会建立相当数量的内存,因此我想根据最终用户的要求准确地显示内存使用情况。在 OS XI 上的 Activity Monitor 中,可以看到我的应用程序 Real Memory 和 Private Memory 的两个内存值。从我读过的内容来看,Private 是该过程所拥有的一切,而 Real 是估计值。我应该相信什么?是否有一个特定的公式可以用来计算确切的使用量而不是 OS X 报告的内容?

不是我的专业领域。

Jer*_*myP 6

如果您担心内存泄漏,您应该使用Apple 提供的各种工具来调试它。

实内存是进程使用的实际物理内存。

专用内存是仅由该进程使用的物理内存。

虚拟内存是进程的整个虚拟内存的大小,包括当前未驻留在物理 RAM 中的那些页面。

如果您有泄漏,实际上很难通过查看这些数字来判断。例如,一个被 malloced 然后泄漏的块将永远不会被再次引用,因此它最终会被换出。它将是虚拟内存的一部分,但不是常驻内存的一部分。所以如果你有泄漏,虚拟内存会随着时间的推移逐渐增加。

另一方面,如果 malloc 找不到要分配的未使用内存块,则虚拟内存会增加,但当 free 返还内存时,虚拟内存不会减少。因此,如果您分配大量 RAM,VM 将增加,但即使您正确释放它,它也永远不会再次减少。如果您也有泄漏,malloc 需要很长时间才能用完回收的 VM,这意味着您可能不会注意到它。

因此,请使用专门构建的泄漏检测工具。