试图追踪我在这里缺少的东西。
在CentOs5上运行。
我把它归结为一个简单的简单程序,最终导致内存泄漏。 不确定这是Valgrind中的错误还是libobjc中的错误。
的main.m
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),我没有内存泄漏。
想法?
答案 0 :(得分:0)
也许你的centOS上没有libobjc?我在Mountain Lion上构建并运行您的代码,没有警告或错误。
答案 1 :(得分:0)
嗯......所以看起来像为每个声明的Objective-C类分配了内存。因此,无论您是否使用它们,链接libobjc最终都会在运行时初始化其中一些类。类初始化成本似乎是一次性成本,所以我认为虽然在程序结束时没有释放内存,但实际上并不是泄漏会伤害我,因为内存必须分配给无论如何,整个计划的长度。
尽管如此,有点烦人。希望我能在应用程序退出之前释放内存。