简单的iPhone应用程序使用太多内存(4MB)

时间:2011-08-28 23:18:00

标签: ios

谢谢你的时间 我正在使用:

  • XCode 4.0 Build 4A304a
  • IOS 4.3.1
  • 在iPhone 4上运行

我刚刚用导航模板创建了一个项目。 该应用程序不执行任何操作,该表只有一行,当您点击此行时,它会检查应用程序使用了多少内存并将结果写入detailTextLabel。 这个应用程序使用4MB。这是正常的吗?

这是我用来获取内存信息的代码:

- (float) reportUsedMemoryInBytes {

    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;
    } else {
        NSLog(@"Error with task_info(): %s", mach_error_string(kerr));
        return -1.0;
    }
}

标签填写

cell.detailTextLabel.text = [NSString stringWithFormat:@"%.2f Mb", 
                             [self reportUsedMemoryInBytes] / 1024.0 / 1024.0];

当使用带内存监视器的仪器时,如果我向下滚动,我会看到我的名为MemTest的进程。

  1. 在实内存列中保持 4.58 Mb
  2. 在虚拟内存列中保持 75.78 Mb
  3. 但是,如果我使用分配并检查第一行所有分配,那么

    1. 在实时字节列中保留 631.51 Kb
    2. 在总字数列中保留 1.26 Mb
    3. 这个简单的应用程序使用的内存量是多少? 我想知道我的应用程序只使用了多少内存而没有Frameworks和IOS Librarys使用的内容。

      感谢每个人的帮助。

1 个答案:

答案 0 :(得分:1)

UIKitFoundation最有可能占该大小的大部分。报告的RSS可能包括这些共享库/框架。有关这一点的讨论,请参阅"Understanding Memory Usage on Linux"

  

为什么ps是“错误的”

     

根据您的观察方式,ps不会报告进程的实际内存使用情况。它真正做的是显示每个进程在运行的唯一进程中将占用多少实内存。当然,典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是“错误的”。为了理解原因,有必要了解Linux如何处理程序中的共享库。

     

Linux上的大多数主要程序都使用共享库来促进某些功能。例如,一个KDE文本编辑程序将使用几个KDE共享库(以允许与其他KDE组件交互),几个X库(允许它显示图像和复制和粘贴),以及几个通用系统库(允许它)执行基本操作)。许多这些共享库,特别是像libc这样的常用库,被许多在Linux系统上运行的程序使用。由于这种共享,Linux能够使用一个很好的技巧:它将共享库的单个副本加载到内存中,并为引用它的每个程序使用该副本。