我读到 LLVM v3 使用代码的静态分析来实现一种在编译期间准备和完成的自动垃圾收集。
如果编译器静态插入保留和释放,则不再需要用于垃圾收集的运行时组件或什么?
这是真的吗?它会在 iOS 和 OS X 开发中替代正常的垃圾收集吗?目前尚不清楚会发生什么..
我们应该依赖这种“静态垃圾回收”吗?
最佳答案
这是一个有趣的问题:静态分析器能否实现完整的垃圾收集系统?
看来,答案是否定的。实现垃圾回收的唯一方法是知道分配的内存(例如对象实例)不再可用。在运行时 GC 中,这些知识是通过(有效地)扫描堆栈和堆获得的。在编译时执行此操作需要分析系统中所有可能的代码路径,以确定在其执行过程中某个特定分配的位置将不再可用。这等同于停机问题。然而,LLVM 声称至少支持一种有限形式的自动引用计数(插入保留/释放)。参见 http://developer.apple.com/technologies/ios5/ .我怀疑 LLVM 正在做的不是完整的 GC,它使用静态分析器来查找对对象的所有引用何时超出范围,并为您插入适当的保留/释放。引用计数发生在运行时,就像以前一样。我非常怀疑它是否会为您自动 free
-ing malloc block 。
如果它像上面公共(public)网站上宣传的那样工作,我会说使用它。
关于objective-c - 垃圾收集在 LLVM 3 中重新定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6293074/