gpt4 book ai didi

garbage-collection - 如何在复制垃圾收集器中转发来自寄存器的指针?

转载 作者:行者123 更新时间:2023-12-04 01:33:09 30 4
gpt4 key购买 nike

在复制垃圾收集器中,当我将对象从源空间复制到目标空间时,某些对象可能会被存储在寄存器中的指针引用。当垃圾收集发生时,该寄存器需要更新以指向目标空间。

问题是,垃圾收集是在程序的特定点执行的(比方说当用户分配内存时),因此,这将调用一个函数来进行收集。反过来,这将使用可能是我们实际需要转发的寄存器。因此,这会产生多个问题:

  • 我们需要转发的寄存器中不会包含转发对象的地址。
  • 当从垃圾收集函数返回时寄存器将被恢复,所以无论如何我们不能在此时转发它。

那么对于指针存放在指针中的对象,如何进行指针转发呢?我们可以假设垃圾收集器是用 C 语言而不是汇编语言编写的(这样可以很容易地不覆盖寄存器)。

最佳答案

编程语言或虚拟机的高效垃圾收集,从一开始就为垃圾收集而设计,始终与代码生成协作。

显然,垃圾收集器必须知道堆栈数据的布局才能对其进行分析。为了提高效率,生成的代码不需要在任何时间点都支持垃圾回收,而只需要在某些安全点 处在垃圾回收需要被标记时可能会自行挂起,或者就像在您的单例中一样-线程情况下,将直接调用垃圾收集器。

在这些点上,代码必须以垃圾收集器可以理解的形式提供其数据。一个简单的解决方案是在调用垃圾收集器之前使用垃圾收集器已知的格式将寄存器压入堆栈,然后再将它们弹出。因此该机制不需要处理其他语言的寄存器保存机制,用于实现垃圾收集器本身。

关于garbage-collection - 如何在复制垃圾收集器中转发来自寄存器的指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470416/

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