我正在尝试跟踪程序中的内存使用情况,我需要知道用于字符串数据数组的总内存。
我的字符串表示为 CFStringRef,我的数组是 CFMutableArrayRef。
在字符串上,我可以调用 CFStringGetLength() 来获取字符串中 UTF16 代码对的数量,但 Apple 字符串存储指南说字符串可以以更多压缩格式存储 [1]。假设 UTF16 是 2 个字节,这肯定会给我一个保守的上限,这是一个好的开始。
对于可变数组,我可以假设存储是(长度提高到 2 的下一次幂)乘以 sizeof(void*)。
有没有更好的方法来计算大小?是否有函数可以获取分配给从 CFType 派生的对象的字节数?
如果做不到这一点,我计划编写一个 CFAllocator,代理对我正在使用的真实 CFAllocator 的所有调用,但记录分配的增量。
最佳答案
您可以尝试使用 malloc_size() (http://www.manpagez.com/man/3/malloc_size/) 来获取每个对象的分配大小。
关于计算 CFStringRef/CFMutableArrayRef 使用的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285362/