gpt4 book ai didi

c - Boehm Weiser 垃圾收集器的机制

转载 作者:太空宇宙 更新时间:2023-11-04 03:07:03 24 4
gpt4 key购买 nike

我正在阅读论文“不合作环境中的垃圾收集器”,想知道实现它会有多困难。该论文描述了需要从处理器收集所有地址(除了堆栈)。堆栈部分看起来很直观。除了在汇编中显式枚举每个寄存器之外,还有什么方法可以从寄存器中收集地址吗?我们假设在类似 POSIX 的系统(例如 linux 或 mac)上使用 x86_64。

设置跳转

最佳答案

自从 Boehm 和 Weiser 实际上 implemented their GC ,那么基本的信息来源就是该实现的源代码(它是开源的)。

要收集寄存器值,您可能需要颠覆 setjmp() 函数,该函数将寄存器的副本保存在自定义结构中(至少是那些应该在整个过程中保存的寄存器)函数调用)。但是该结构不是标准化的(其内容名义上是不透明的)并且 setjmp() 可能由 C 编译器专门处理,这使得它用于除 longjmp( )(这已经很困难了)。一段内联汇编似乎更容易和更安全。

GC 实现中的第一个困难部分似乎能够可靠地检测堆栈的开始和结束(注意复数:可能有线程,每个线程都有自己的堆栈)。这需要深入研究 OS ABI 记录不当的细节。当我的桌面系统是运行 FreeBSD 的 Alpha 机器时,Boehm-Weiser 实现无法在其上运行(尽管它在同一处理器上支持 Linux)。

第二个困难部分是尝试分代时,通过使用页面访问权限来捕获写访问。这又需要阅读一些存在问题的文档和一些内联汇编。

关于c - Boehm Weiser 垃圾收集器的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3692724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com