计算 CFStringRef/CFMutableArrayRef 使用的字节数

标签 c ios macos memory-management core-foundation

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

我的字符串表示为 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

最佳答案

您可以尝试使用 malloc_size() (http://www.manpagez.com/man/3/malloc_size/) 来获取每个对象的分配大小。

关于计算 CFStringRef/CFMutableArrayRef 使用的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285362/

相关文章:

ios - 删除 OS X 设备的 MDM 负载

macos - 802.1X Mac El Capitan配置文件删除

c - 纯 C OpenCL 与 Python OpenCL 性能对比

c - malloc的输出内存地址

c - 在 c 中获取以 2 为底的对数时出错

ios - 如何将元数据添加到 AVAudioRecorder 录制的 AAC 文件中?

ios - 全局加载图标 Swift

ios - Xcode Convert to ARC, Create universal binary fails with error of "can' t 找出架构类型”

c - 为什么0的大小显示为4?

macos - 如何从 Objective-C 的 WKWebView 获取选定的文本