Я ищу способ как можно точнее отслеживать использование памяти 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.
Поведение, которое я не могу объяснить, заключается в том, что когда выделенная память достигает около 500 МБ, значение, возвращаемое этой функцией, не увеличивается (она продолжает отображать значение в диапазоне 450/450 МБ), покаОтладчик Xcode продолжает расти до 1,3 ГБ, а затем мое приложение уведомляется о предупреждении памяти.
Код, который я использовал для проверки этой функции, запускается каждые 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;
}
Я что-то упустил?