Boehm和标记指针

3
标记指针是在实现动态语言时常见的一种优化方法:利用对齐要求,使得指针低位的两到三位始终为零,并使用它们来存储类型信息。
假设您正在使用Boehm垃圾收集器,该收集器基本上通过查看类似指针的已激活数据来工作。标记指针不像指针那样看起来像指针,因为它们的低位不为零。
这是否是一个致命问题?也就是说,如果您正在使用Boehm,您是否必须放弃标记指针?还是它有解决此问题的方法?

为什么要使用Boehm作为语言实现?如果您足够高级,考虑节省一些类型信息,那么您肯定可以编写一个手工定制的GC,它不会出现这种情况,并且比Boehm更聪明,适用于您的语言?对吗? - user395760
2
从原则上讲也许可以,但在短期内要做得比Boehm更好是非常困难的(请注意例如Mono直到最近才开始使用它),而在长期内,我旨在实现与C的互操作性(在这种情况下,Boehm可以说是一种几乎最优的解决方案)。 - rwallace
1个回答

3
据我所知,Boehm可以通过正确的选项来处理这个问题。它能够以很小的代价检测内部指针。也可以编写自己的扫描代码。基本上,可能有足够的钩子来处理几乎任何事情。
我已经编写了自己的收集器,它在堆上是精确的,在栈上是保守的。它不会触及C语言制作的指针。对于某些应用程序,它将更快,因为它了解我的语言分配对象并且不关心其他使用传统C++析构函数管理的东西。
但是它不是增量或分代的,并且它不能像Boehm那样处理线程(它不够聪明,无法通过信号停止线程)。然而,好的一面是它不需要Boehm使用的魔术链接技术(来捕获malloc等)。严重缺点是您不能将托管对象放入未管理的对象中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接