- (float)getMemoryUsage {
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 ((float)info.resident_size/1048576.0f);
else return 0;
}
-(float)getFreeMemory {
mach_port_t host_port;
mach_msg_type_number_t host_size;
vm_size_t pagesize;
host_port = mach_host_self();
host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
host_page_size(host_port, &pagesize);
vm_statistics_data_t vm_stat;
if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS) {
//NSLog(@"Failed to fetch vm statistics");
return 0;
}
natural_t mem_free = vm_stat.free_count * pagesize;
return ((float)mem_free/1048576.0f);
}
Both methods return the memory in megabytes. This is pretty much a copy/paste from other sources. So if anyone has any corrections on the code, that would be great.
The memory stats using these methods seem semi-reliable at most, I wouldn't rely on it completely.