小编Ral*_*les的帖子

CFSTR()是否分配内存?

我了解CFSTR()文档以表明它分配了内存。它可以在失败时返回NULL,并且结果可以使用,直到程序终止为止,而不管是调用CFRelease()还是删除引用。它包装了静态字符串,但是一定要分配一个CFString类结构来这样做。因此,不适合在长时间运行的程序中使用。

但是,在对此进行了一些推后,我尝试了以下测试程序。我看不到内存占用top增加。valgrind报告的泄漏不随循环大小而变化。是否有重复数据删除?

#include <CoreFoundation/CFString.h>
#include <stdio.h>

int main(void) {
  int count = 0;
  int chars = 0;
  for (int i = 0; i < 100000000; i++) {
    CFStringRef str = CFSTR("Goodbye.");
    if (str) {
      count++;
      chars += CFStringGetLength(str);
      // Drop reference!
    }
  }
  printf("%d strings, %d chars\n", count, chars);
  CFStringRef str = CFSTR("Hello, World.");
  CFShowStr(str);
}
Run Code Online (Sandbox Code Playgroud)

另一个询问者报告说CFSTR()在Windows上确实泄漏。其他人则说这就像是Objective C的@"String"文字语法。CFString参考提到-fconstant-cfstrings在gcc 3.3上需要。宏是否在构建时使用魔术编译器扩展来创建这些扩展?

在我的MacOS X 10.8.5机的CoreFoundation / CFString.h定义CFSTR因为__builtin___CFStringMakeConstantString 除了在Windows或Linux,它使用非内置版本。

因此,似乎答案可能是“ …

c memory macos memory-leaks core-foundation

3
推荐指数
1
解决办法
1219
查看次数

标签 统计

c ×1

core-foundation ×1

macos ×1

memory ×1

memory-leaks ×1