我使用以下内容来获取内存:
struct task_basic_info info;
mach_msg_type_number_t sizeNew = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(),
TASK_BASIC_INFO,
(task_info_t)&info,
&sizeNew);
if( kerr == KERN_SUCCESS ) {
printf("Memory in use (in bytes): %u", info.resident_size);
} else {
printf("Error with task_info(): %s", mach_error_string(kerr));
}
但是由此返回的内存远高于XCode6所显示的内存,其他任何人都面临同样的问题?
答案 0 :(得分:1)
驻留设置大小(RSIZE)不与使用的内存量相同'。它也包括代码。
您可能正在寻找RPRVT
计划中top
的最高等效内容。
获取该信息需要遍历该进程的VM信息。使用code for libtop.c, function libtop_update_vm_regions
作为模板,您需要遍历整个内存映射,将所有私有页面相加。这里有一个更简单的walking the address space示例,可用作计算此大小的基础。您正在查找VPRVT
值,不 RPRVT
值。
我目前没有马克思可以用任何程度的信心写出一个可行的例子。