为什么仪器无法跟踪我的内存使用情况?

时间:2013-01-28 17:18:49

标签: iphone ios objective-c memory instruments

我正在为App Store开发一个应用程序,并且内存管理存在奇怪的问题。

我正在使用ARC。

在连接到乐器的 unjailbroken iPod touch 4G 6.0.1 上测试我的应用程序时,一切似乎都很好 - 我的应用程序使用低于5mb 的内存时间并没有泄漏。然而,在长时间使用之后,尽管仍然在仪器中被监视为< 5Mb,我开始得到内存警告,最后被操作系统 kill 。我在后台没有任何打开的应用程序,所以我假设我的应用程序泄漏内存仪器无法跟踪。怎么会这样?

此外,我开始使用一个函数来跟踪内存使用情况,具体来说:

 struct task_basic_info info;
    mach_msg_type_number_t size = sizeof(info);
    kern_return_t kerr = task_info(mach_task_self(),
                                   TASK_BASIC_INFO,
                                   (task_info_t)&info,
                                   &size);
    if( kerr == KERN_SUCCESS ) {
        return info.resident_size/1024.0/1024.0;
    } else {
        return -1.0;
    }

它似乎报告我的应用程序行为(60-70Mb)可能预期的范围内存使用情况。我在仪器中同时进行测量,它仍显示〜3-4Mb。这是怎么回事?

2 个答案:

答案 0 :(得分:4)

仪器可能跟踪堆分配而不是总地址空间消耗。如果您的应用程序导致大量文件被内存映射,则可能导致堆分配量(malloc等)较低,但应用程序的系统内存消耗较高。

在不了解您的应用程序的情况下,除了上述内容之外,无法进行真正的推测。

答案 1 :(得分:1)

Allocations仪器仅跟踪堆内存,它只占整个运行应用程序内存使用量的一小部分。

查看VM Tracker工具,即整个虚拟内存使用情况统计信息,也许您可​​以找到问题所在。