如何解释Instruments中的Allocations和VM Tracker结果?

5
我正在追踪一个非常棘手的内存泄漏(或更可能是未释放的内存)问题。我执行以下操作:
1)启动我的应用程序 2)到达应用程序将显示泄漏的点 3)使用“分配”选项开始仪表 4)连接到我的进程并开始记录 5)进行初始堆快照 6)使用VM跟踪器进行首次快照 7)重现导致内存上升的步骤 8)进行另一个堆快照 9)使用VM跟踪器进行另一个快照
如果我执行这些步骤,我看到的结果并不真正有意义。我希望我错过了关于这些工具如何工作的一些信息。例如,我知道“泄漏”工具没有跟踪所有类型的内存分配(例如碳应用程序)。我的应用程序是一个巨大的、遗留的应用程序,可能在某些过时的子系统中有奇怪的分配代码,而我对此不熟悉。尽管如此,这就是我看到的:
- 在VM跟踪器的初始快照中,当我查看摘要时,类型MALLOC_SMALL大小约为72MB(虚拟大小) - 在第二个快照中,MALLOC_SMALL使用量增长到224MB(再次是虚拟大小) - 在第二个堆快照中,它告诉我堆增长为45MB
那么MALLOC_SMALL如何从72MB增长到224MB,但堆增长只有45MB呢?分配仪器是否漏了VMTracker正在记录的内容?
进一步支持我在Allocations工具中缺少某些东西...如果我查看MALLOC_SMALL下列出的NEW区域(不在第一个快照中,但在第二个快照中),这些地址应对应于已分配的页面,并占用72MB-> 224MB的差异,正确吗?然后,我记住了该区域的地址范围(例如0x79000000-0x7b000000),回到Allocations工具并按地址对“所有对象”列表进行排序。然后我寻找那个范围内的地址。然而,我只看到4个分配,仅占用4KB?! VM跟踪器报告的区域中的其他32MB在哪里?
任何帮助都将不胜感激...我希望这是关于这些工具工作方式的基本问题,我只是没有理解。
1个回答

3

这实际上类似于苹果开发者指南。 - OhadM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接