0

试图找出我在这里缺少的东西。

在 CentOs5 上运行。

我把它归结为一个简单的简单程序,但最终还是会出现内存泄漏。不确定这是 Valgrind 中的错误还是 libobjc 中的错误。

主文件

int main(){return 0;}

我编译并将其与 gcc 链接

gcc main.m -o main -lobjc

当我跑步时,valgrind main我得到了泄漏的内存

==27005== HEAP SUMMARY:
==27005==     in use at exit: 8,485 bytes in 133 blocks
==27005==   total heap usage: 145 allocs, 12 frees, 11,053 bytes allocated
==27005==
==27005== LEAK SUMMARY:
==27005==    definitely lost: 16 bytes in 1 blocks
==27005==    indirectly lost: 16 bytes in 1 blocks
==27005==      possibly lost: 0 bytes in 0 blocks
==27005==    still reachable: 8,453 bytes in 131 blocks
==27005==         suppressed: 0 bytes in 0 blocks

如果我不链接 libobjc(不使用 -lobjc),我不会出现内存泄漏。

想法?

4

2 回答 2

0

嗯......所以看起来内存是为每个声明的Objective-C类分配的。因此,无论您是否使用它们,链接 libobjc 最终都会在运行时初始化其中一些类。类初始化成本似乎是一次性成本,所以我想虽然在程序结束时没有释放内存,但它确实不是会伤害我的泄漏,因为必须为该内存分配无论如何,整个程序的长度。

不过,还是有点烦。希望我能在应​​用退出之前释放那个内存。

于 2012-09-01T01:59:21.423 回答
0

也许你的centOS上没有libobjc?我在 Mountain Lion 上构建并运行您的代码,没有任何警告或错误。

于 2012-08-31T01:29:33.093 回答