Вычислить количество байтов, используемых CFStringRef / CFMutableArrayRef - PullRequest
1 голос
/ 02 сентября 2011

Я пытаюсь отслеживать использование памяти в моей программе, и мне нужно знать общий объем памяти, используемой для массива строковых данных.

Мои строки представлены как CFStringRef, а мой массив - CFMutableArrayRef.

В строке я могу вызвать CFStringGetLength (), чтобы получить количество пар кодов UTF16 в строке, но в руководстве по хранению строк Apple говорится, что строки могут храниться в более сжатых форматах [1].Предполагая, что UTF16 составляет 2 байта, это наверняка даст мне консервативную верхнюю границу, что является хорошим началом.

Для изменяемого массива я мог бы предположить, что хранилище равно (длина увеличена до следующей степенииз 2) раза sizeof (void *).

Есть ли лучший способ рассчитать размер?Есть ли функция для получения байтов, выделенных для объекта, полученного из CFType?

В противном случае я планирую написать CFAllocator, который передает все вызовы на реальный CFAllocator, который я использую, но записывает дельтыассигнования.

[1] http://developer.apple.com/library/mac/#documentation/CoreFoundation/Conceptual/CFStrings/Articles/StringStorage.html#//apple_ref/doc/uid/20001179-CJBEJBHH

1 Ответ

0 голосов
/ 02 сентября 2011

Вы можете попробовать использовать malloc_size () (http://www.manpagez.com/man/3/malloc_size/), чтобы получить размер выделения для каждого объекта.

...