【发布时间】:2011-01-05 11:50:00
【问题描述】:
在将垃圾收集语言编译成 C 时,垃圾收集的技术是什么?我知道两个:
维护一个影子堆栈,将所有根显式保存在数据结构中
使用像 Boehm 这样的保守垃圾收集器
第一种技术很慢,因为您必须维护影子堆栈。可能每次调用函数时,您都需要将局部变量保存在数据结构中。
第二种技术也很慢,并且由于使用了保守的垃圾收集器,本质上不会回收所有垃圾。
我的问题是:编译为 C 时垃圾收集的最新技术是什么。请注意,我并不是指在 C 中编程时进行垃圾收集的便捷方式(这是 Boehm 垃圾收集器的目标), 编译到 C 时只是一种进行垃圾收集的方法。
【问题讨论】:
-
这是一个讨厌的。这也是为什么例如LLVM 和 C-- 很受欢迎(它们允许垃圾收集而无需手动处理)。
-
原始语言中的类型系统是基于有向无环图还是通用图? DAG 只需要引用计数(由于是非循环的)。
-
一般图表,很遗憾。我也考虑过引用计数,但这似乎并不能解决所有问题,因为您仍然需要一种方法来遍历根以收集循环......
-
编译到 C是什么意思?能给个示例命令吗?
标签: c compiler-construction garbage-collection