Hi,
I was looking to make a OF method to know how many memory is free in IOS system to avoid memory warnings. Here’s some code to do that, but I am wondering how to cast a type natural_t to c++ one. Anyone have some idea how to do this conversion?
#import <mach/mach.h>
#import <mach/mach_host.h>
+(natural_t) get_free_memory {
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;
}
/* Stats in bytes */
natural_t mem_free = vm_stat.free_count * pagesize;
return mem_free;
}
I found question myself answer. A natural_t variable is casting to an int type by: “int variableInt= round(variable_natural_t/100000);”
Full code that could convert in OF methods for IOS used, free and total memory:
#import <mach/mach.h>
#import <mach/mach_host.h>
-(void) print_free_memory {
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;
int iUsed = round(mem_used/100000);
int iFree = round(mem_free/100000);
int iTotal = round(mem_total/100000);
NSLog(@"used: %d free: %d total: %d", iUsed, iFree, iTotal);
}