【发布时间】:2013-03-17 16:51:53
【问题描述】:
我正在设计一个预先编译 CIL 字节码的系统。为了使其相对简单并使其非常可移植,系统将发出 C 源代码(但排除了所有更高级别的结构,如 OOP)而不是机器代码。目的是目标平台的标准 C 编译器将用于该代码以获得最终产品。
最初我打算使用一种非常简单的 GC 方法,例如 stop-the-world。然而,虽然应用程序不需要出色的性能,但它确实需要不错的性能,因此最终可能需要更改 GC。
我正在考虑最终需要某种写屏障的更复杂的 GC。我已经研究过 SATB 和卡片标记方法,但我还没有准备好实际计划一个好的 GC。我只是不想让这个东西发出 C 源代码,但后来发现高效的 GC 写入障碍需要内联汇编,这在很大程度上违背了发出 C 的目的。
那么,我的问题是,典型的写障碍能否在 C 代码中有效地实现?我们可以假设 C 编译器有一个不错的优化器。生成的“源代码”将完全难以辨认,这也是一个假设,因此清晰度并不重要。
我猜 - 以进一步膨胀源文件为代价 - 它可能可以合理地完成,但我会感谢在 GC 设计和/或编译器内部更有经验的人的话。
【问题讨论】:
标签: garbage-collection code-generation