在实现动态语言时,标记的指针是一种常见的优化:利用对齐要求,这意味着指针的低两个或三位始终将始终为零,并使用它们来存储类型信息。

假设您正在使用Boehm垃圾收集器,该收集器基本上是通过查看看起来像指针的东西的活动数据来工作的。标记的指针看起来不像指针,从某种意义上说,它们的低位不是零。

这是一个展示器,即如果您使用Boehm,您必须放弃标记指针吗?还是解决这个问题?

有帮助吗?

解决方案

Afaik Boehm可以使用正确的选项来处理此操作。它以较小的价格能够检测到内部指针。也可以编写自己的扫描代码。基本上,可能有足够的钩子来处理任何东西。

我已经写了自己的收藏家,这在堆栈上的堆和保守派都是精确的。它不会触摸C制成的指针。对于某些应用程序,它会更快,因为它对我的语言分配的对象了解很多,并且不关心使用传统的C ++驱动器进行管理的其他内容。

但是,它不是增量或世代相传的,也不会处理线程(它不够聪明,无法停止使用信号的线程)。但是,从好的方面来说,它不需要Boehm所做的魔术链接技术(捕获Mallocs等)。在严重的负面,您无法将托管对象放入不受管理的对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top