使用Instruments分析内存泄漏 - iPhone 4和iOS 5 Simulator之间存在巨大差异

时间:2011-12-12 00:24:46

标签: iphone ios memory-management instruments

当使用Instruments分析我的应用程序(寻找内存泄漏)时,我得到的iOS 5 iPhone模拟器的结果与我使用运行iOS 5的iPhone 4的结果非常不同。第一张图显示了分析结果与真实设备,第二个是模拟器:

真实设备:

Real device


iOS 5模拟器:

Simulator

在两种情况下,此配置文件都在应用程序的同一点上完成:在rootViewController的视图生命周期中完成viewDidLoad。我已经在两个中等待总分配内存稳定输出。正如您在设备图中看到的那样,在00:10左右会出现一些极端波动,这些波动在模拟器中不存在。在真实设备上,总分配内存在00:08左右从1MB跳到3.5 MB然后再回到1.5 MB,最后跳到4.74,稳定下来。为模拟器分配的内存更加线性,它稳定地快速攀升到2.35 MB左右,稳定下来。

需要注意的另一件事是设备上存在2.25 MB的已分配内存,而不是来自malloc的模拟器和来自CFNumber的700+ KB。由于我使用仪器和分析相对较新,我不确定这是否正常。一个快速的谷歌搜索没有任何确定性。 2.25 MB和700 KB以上弥补了内存分配的差异。为了平衡事物,有更多的malloc条目,模拟器测试中存在不同的内存量,在设备测试中不存在。

另外,我发现当第二个UIViewController被推送到UINavigationController堆栈时,分配的内存在真实设备上跳转到大约8.5-9 MB,但只有大约4.5到大约4.5兆字节 tops 模拟器。

我知道可以预期设备的运行方式与模拟器有很大不同,但是内存分配不应该非常相似,因为在两个设备上运行相同的代码?我会理解这是否是性能分析,但对于内存分配,似乎数字应该非常相似。任何人都可以了解这是否正常吗?

3 个答案:

答案 0 :(得分:9)

这种行为是可以预期的。从技术上讲,当您使用模拟器运行分析时,您将根据桌面硬件测量统计数据。即使你只是分析分配,你也不能期望它们能够同样工作,因为许多软件优化/算法/等等都是基于它运行的硬件。

不幸的是,Apple没有iOS 模拟器。您最好使用该设备进行性能分析,因为模拟器往往仍然不可靠且速度慢(例如Android模拟器)。

答案 1 :(得分:3)

您应始终在iOS设备上运行泄漏,而不要在模拟器上运行。从模拟器获得的结果只会令人分心,因为它们很少100%准确。你会发现自己正在追逐很多红色鲱鱼!呵呵呵

答案 2 :(得分:3)

  

我知道可以预期该设备会有很大的作用   与模拟器不同,但内存分配不应该   非常相似,因为在两个设备上运行相同的代码?一世   会理解这是性能分析,还是内存   分配,似乎数字应该非常相似。能够   谁能说清楚这是否正常?

从技术上讲,代码完全不同。模拟器应用程序编译x86字节码,而设备编译为armv6 / armv7。