Для меня этот тег был связан с большими UIImages, которые я выделил. Я провел некоторое исследование того, как вы можете получить больше информации об этом, и могу предложить некоторые (возможно) полезные вещи.
Я полагаю, что интересующие вас теги передаются через аргумент flags функции vm_allocate и т.п., а не OSMalloc_tagAlloc(). В примечаниях к выпуску iOS 3.1 упоминаются заголовки ‹mach/vm_statistics.h> и ‹mach/vm_map.h> в связи с инструментом VM.
Я думаю, что тег передается через параметр флагов vm_allocate в соответствии с VM_FLAGS_ALIAS_MASK vm_statistics.h и после #define. (Здесь они называются «псевдонимами».) Это означает, что вы должны иметь возможность создать скрипт dtrace, который ищет, скажем, vm_allocate и извлекает тег из параметра flags. Например:
sudo dtrace -n 'fbt:mach_kernel:vm_allocate:entry /pid==12345/ { printf("%d", (arg3 & 0xFF000000) >> 24); }'
Вы можете использовать инструменты, чтобы создать инструмент dtrace и запустить его на симуляторе iOS через «Создать новый инструмент ...» в меню «Инструмент», или вы можете использовать скрипт dtrace из командной строки и включить /pid == 123456 / предикат для вашего работающего приложения.
К сожалению, мне не удалось найти правильный зонд для обнаружения этих распределений. При проверке соответствующей переменной argN кажется, что флаги всегда имеют 0 в части тега/псевдонима. Я пробовал, например, fbt:mach_kernel:vm_allocate, как указано выше, fbt:mach_kernel:mach_vm_allocate, fbt:mach_kernel:vm_map_enter и т. д. Возможно, эти распределения происходят по какому-то другому пути? Я мало знаю о системе распределения памяти ядра.
Итак, я не совсем уверен, где эти теги передаются ядру, но я надеюсь, что это поможет вам отследить это.
person
Jesse Rusak
schedule
11.01.2011