标记和扫描垃圾收集中的指针反转会给你带来什么?

yar*_*ian 14 compiler-construction garbage-collection pointers

我觉得我错过了一些非常简单的东西,但我试图理解标记和扫描垃圾收集每个Andrew Appel的现代编译器实现在ML书中,并且Mark和Sweep部分中有一个标题为Pointer Reversal(270)的小段落.

在这一点上,我想我明白它是如何工作的.简而言之,当您遍历图形时,您可以翻转所有指针,以便您的前任位于您的字段集中.然后,当您完成给定元素后,将指针向后翻转,使它们再次指向正确的位置.

如果这是正确的,它究竟是什么给你买的?Appel试图解释这一点,但我并没有完全理解他的措辞.

Hea*_*ink 11

在标记过程中,对象分为三类:

  1. 尚未标记的对象
  2. 已标记的对象,但可以指向未标记的对象
  3. 已标记的对象仅指向标记的对象

随着标记的进行,对象将状态从类别1更改为类别2,从类别2更改为类别3.垃圾收集器必须跟踪类别2中的所有对象,以便它可以找到所有未标记的对象.但它在哪里存储这些信息?当内存完全填满时,垃圾收集可能正在运行,因此无法动态分配数据结构.它应该使用已经分配的内存构建一个包含类别2中对象的数据结构.指针反转是一种用于在不分配内存的情况下构建这些对象的链接列表的算法.