我正在寻找一种方法来尽可能准确地从我的应用程序中跟踪iOS内存使用情况。经过多次试验,我最终得到以下代码:
uint64_t memory_usage (void) {
task_vm_info_data_t vmInfo;
mach_msg_type_number_t count = TASK_VM_INFO_COUNT;
if (task_info(mach_task_self(), TASK_VM_INFO, (task_info_t) &vmInfo, &count) != KERN_SUCCESS) return -1;
return vmInfo.internal;
}
从真实设备执行时,返回的值与Xcode调试器报告的值同步。
我无法解释的行为是,当分配的内存达到约500MB时,此函数返回的值不会增加(它继续报告450 / 450MB范围内的值),而Xcode调试器将继续增长直到1.3GB然后将内存警告通知我的应用。
我用于测试此功能的代码每隔0.5秒从NSTimer内部触发以下操作:
- (void) checkMemory {
uint64_t mem_usage = memory_usage();
// allocate a 5MB buffer to test memory usage
uint32_t buffer_size = 5 * 1024 * 1024;
char *buffer = (char *)malloc(buffer_size);
memset(buffer, 0, buffer_size);
p[i++] = buffer;
}
我想念什么吗?