Я сделал настройку, которая показывает свободный барабан внутри подключенного метода SpringBoard. Я использую этот код:Странное поведение на 64-битных устройствах iOS при получении статистики vm
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){
ram = @"N/A";
}else{
natural_t bytes = (vm_stat.free_count * pagesize);
}
На устройствах, предшествующих 5-м и воздуху, работает отлично. Но 64-битные пользователи устройств сообщили, что они получают количество свободного бара больше, чем максимальное количество ОЗУ на устройстве. Я сделал утилиту командной строки с тем же кодом и попросил запустить ее как root из терминала, а утилита командной строки указала правильные значения. Я проверил, почему это происходит, и выяснил, что внутри SpringBoard на 64-битных устройствах host_page_size(host_port, &pagesize);
возвращает pageize = 16384, что на самом деле в 4 раза больше, чем в утилите командной строки. Опять же, это влияет только на 64-разрядные устройства, на других устройствах он показывает страницыize = 4096 (правильное значение) независимо от того, где. Его можно исправить с помощью hardcoded pagesize = 4096, но я хочу знать, почему это происходит, может быть, мне не хватает чего-то важного.
Я проверил это прямо сейчас на iOS8, и мой старый код, и 'getpagesize()' дают правильные значения везде. Во всяком случае, было странно, что он показывал разные значения в iOS7 в SpringBoard и в исполняемом файле командной строки. – user1855732
Также проблема может заключаться в использовании 32-битной функции host_statistics вместо host_statistics64 и так далее. – alexandrmoroz
К сожалению, host_statistics64 не исправляет эту проблему :(Размер страницы 4096 или 16384 (зависит от устройства), но количество страниц одинаково всегда. Возможно, стоит обходным путем по hardcode 4096 ... – alexandrmoroz