谢谢你的时间 我正在使用:
我刚刚用导航模板创建了一个项目。
该应用程序不执行任何操作,该表只有一行,当您点击此行时,它会检查应用程序使用了多少内存并将结果写入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的进程。
但是,如果我使用分配并检查第一行所有分配,那么
这个简单的应用程序使用的内存量是多少? 我想知道我的应用程序只使用了多少内存而没有Frameworks和IOS Librarys使用的内容。
感谢每个人的帮助。
答案 0 :(得分:1)
UIKit
和Foundation
最有可能占该大小的大部分。报告的RSS可能包括这些共享库/框架。有关这一点的讨论,请参阅"Understanding Memory Usage on Linux":
为什么ps是“错误的”
根据您的观察方式,ps不会报告进程的实际内存使用情况。它真正做的是显示每个进程在运行的唯一进程中将占用多少实内存。当然,典型的Linux机器在任何给定时间都有几十个进程在运行,这意味着ps报告的VSZ和RSS数字几乎肯定是“错误的”。为了理解原因,有必要了解Linux如何处理程序中的共享库。
Linux上的大多数主要程序都使用共享库来促进某些功能。例如,一个KDE文本编辑程序将使用几个KDE共享库(以允许与其他KDE组件交互),几个X库(允许它显示图像和复制和粘贴),以及几个通用系统库(允许它)执行基本操作)。许多这些共享库,特别是像libc这样的常用库,被许多在Linux系统上运行的程序使用。由于这种共享,Linux能够使用一个很好的技巧:它将共享库的单个副本加载到内存中,并为引用它的每个程序使用该副本。