1

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

我正在使用 ARC。

在连接到 Instruments 的未越狱 iPod touch 4G 6.0.1上测试我的应用程序时,一切似乎都很顺利——我的应用程序始终使用不到 5mb的内存并且没有泄漏。然而,经过长时间的使用,尽管仍然在仪器中被监控为 < 5Mb,但我开始收到内存警告并最终被操作系统杀死。我在后台没有任何打开的应用程序,所以我假设我的应用程序正在泄漏内存,仪器无法跟踪。怎么会这样?

此外,我开始使用一个函数来跟踪内存使用情况,特别是:

 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)可能预期的内存使用情况。我在 Instruments 中同时进行测量,它仍然显示 ~3-4Mb。这里发生了什么?

4

2 回答 2

4

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

如果不了解您的应用程序的更多信息,则无法真正推测超出上述内容。

于 2013-01-28T18:16:29.197 回答
1

Allocations 工具只跟踪堆内存,它只是整个运行应用程序内存使用的一小部分。

看看VM Tracker这个工具,就是整个虚拟内存使用统计,说不定就能找到问题所在。

于 2013-02-01T07:17:59.700 回答