计算CFStringRef/CFMutableArrayRef使用的字节数

计算CFStringRef/CFMutableArrayRef使用的字节数,c,ios,macos,memory-management,core-foundation,C,Ios,Macos,Memory Management,Core Foundation,我试图在我的程序中跟踪内存使用情况,我需要知道字符串数据数组使用的总内存 我的字符串表示为CFStringRef,我的数组是CFMutableArrayRef 对于字符串,我可以调用CFStringGetLength来获取字符串中UTF16代码对的数量,但是Apple字符串存储指南说字符串可以以更压缩的格式存储[1]。假设UTF16是2个字节,这肯定会给我一个保守的上限,这是一个好的开始 对于可变数组,我可以假设存储长度提高到sizeofvoid*的2倍 有没有更好的方法来计算尺寸?是否有一个函

我试图在我的程序中跟踪内存使用情况,我需要知道字符串数据数组使用的总内存

我的字符串表示为CFStringRef,我的数组是CFMutableArrayRef

对于字符串,我可以调用CFStringGetLength来获取字符串中UTF16代码对的数量,但是Apple字符串存储指南说字符串可以以更压缩的格式存储[1]。假设UTF16是2个字节,这肯定会给我一个保守的上限,这是一个好的开始

对于可变数组,我可以假设存储长度提高到sizeofvoid*的2倍

有没有更好的方法来计算尺寸?是否有一个函数来获取为从CFType派生的对象分配的字节数

如果做不到这一点,我计划编写一个CFAllocator,它将所有调用代理给我正在使用的真正的CFAllocator,但记录分配的增量


[1] 您可以尝试使用malloc\u大小http://www.manpagez.com/man/3/malloc_size/ 获取每个对象的分配大小。

我的提示:您可以使用cfStringGetMaximumSizeForncoding计算其他编码的大小。用法示例:len=CFStringGetMaximumSizeForncodingCFStringGetLengthTMP,kCFStringEncodingUTF8;那是个好主意。不幸的是,它不能在所有情况下都工作,因为CFType对象不必使用malloc分配。我的库接受一个CFAllocatorRef作为输入,所有的输入都通过这个分配器。有人可能在malloc之上实现一个基于池的分配器,然后malloc\u大小将失败。