Knowing the amount of memory in the device is very critical esp. if you are trying to figure out memory leak. We can use C API to find out the Free, Used and Total memory of the device.

The following method shows how to print out the memory stats. This method can be called however many times in a background thread to keep on printing the memory foot print. This can be used to diagnose a memory leak situation.


+(NSString *) getMemoryStats
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");

/* Stats in bytes */
natural_t mem_used = (vm_stat.active_count +
vm_stat.inactive_count +
vm_stat.wire_count) * pagesize;
natural_t mem_free = vm_stat.free_count * pagesize;
natural_t mem_total = mem_used + mem_free;
debugLog(@"memory : used: %u free: %u total: %u", mem_used/1000000, mem_free/1000000, mem_total/1000000);

NSString *mem = [NSString stringWithFormat:@"%u/%u/%u",mem_used/1000000, mem_free/1000000, mem_total/1000000];
return mem;