Разница dirty / resident / virtual memory?
Четыре метрики
- Virtual — весь диапазон виртуальных адресов, который процесс зарезервировал: все сегменты бинаря и dylib-ов, shared cache, стеки,
malloc-регионы,mmap-файлы. На 64-битной системе это гигабайты «на бумаге» (адреса дешёвые) — цифра почти ни о чём не говорит. - Resident (RSS) — сколько из этого сейчас физически лежит в RAM. Включает и чужие страницы: код системных фреймворков, который разделён между всеми процессами, поэтому RSS завышает «вину» приложения.
- Dirty — страницы, которые процесс изменил: куча, стеки, декодированные изображения,
__DATAпосле записи. Их нельзя выбросить, потому что восстановить неоткуда — только держать или сжать. - Compressed — dirty-страницы, которые memory compressor сжал и держит в RAM в сжатом виде.
Продолжение ответа с кодом и уточняющими вопросами интервьюера — в приложении DevPrep.
Полный ответ — в DevPrep