iOS:识别虚拟内存分配的来源

Posted

技术标签:

【中文标题】iOS:识别虚拟内存分配的来源【英文标题】:iOS: Identifying source of virtual memory allocations 【发布时间】:2013-03-16 20:44:50 【问题描述】:

使用 VM Tracker 工具,我发现我的 ios 应用程序上的虚拟内存使用量不断增长。正在增长的分配不会出现在常规分配工具中,我想知道确定它们来自哪里的过程是什么。正在增长的类别是 VM_ALLOCATE。

我在 vm_allocate 上放置了一个符号断点,以捕获我看到的特定大小的分配在仪器中泄漏(使用寄存器 $r2 作为大小参数)。但是,在应用程序的整个生命周期中,我只看到少数 4k 分配(来自调试 NSLog 调用),并且仪器中没有报告 1+ MB 分配。

我用来中断仪器中 VM_ALLOCATE 下报告的所有分配的方法是否正确?有什么想法我可以尝试确定分配增长的来源吗?

【问题讨论】:

【参考方案1】:

在 mach_vm_map 上放置一个符号断点。这会让你得到更多,但也许不是全部。

另见http://www.opensource.apple.com/source/Libc/Libc-825.40.1/gen/magazine_malloc.c

另一种可能性是紧邻的 VM 分配显示在合并到单个块中的仪器中。换句话说,Instruments 所显示的单个大分配实际上可能由许多相邻的小分配组成。不过,我还没有验证这一点。

【讨论】:

以上是关于iOS:识别虚拟内存分配的来源的主要内容,如果未能解决你的问题,请参考以下文章

带你学会物理内存和虚拟内存

iOS进程内存分配(页、栈、堆)

Java 内存分配策略

vmware(虚拟机) 内存分配问题

JAVA虚拟机内存分配与回收机制

vmware 虚拟机实际使用的内存超过分配的内存在使用啥?