Compiler construction 根据现代编译器在ML中的实现实现垃圾收集器

Compiler construction 根据现代编译器在ML中的实现实现垃圾收集器,compiler-construction,garbage-collection,programming-languages,Compiler Construction,Garbage Collection,Programming Languages,在Appel在ML中的现代编译器实现的第13章中,这本书给出了如何为它定义的Tiger编程语言构造垃圾收集器的建议。我的问题是关于书中描述的指针映射,这些指针映射基本上是在每个调用站点生成的关于分配块的当前根的信息 在第288页,它说为每个临时变量实现一个带有布尔值的临时映射:它是指针还是指针?还为每个堆栈帧中的偏移量制作一个类似的映射,用于驻留在帧中的指针变量 这里的temp指的是无限数量的临时表,这些临时表稍后将被着色到机器寄存器中。我不明白的是: 表示临时映射的好方法是什么?这些临时变量随

在Appel在ML中的现代编译器实现的第13章中,这本书给出了如何为它定义的Tiger编程语言构造垃圾收集器的建议。我的问题是关于书中描述的指针映射,这些指针映射基本上是在每个调用站点生成的关于分配块的当前根的信息

在第288页,它说为每个临时变量实现一个带有布尔值的临时映射:它是指针还是指针?还为每个堆栈帧中的偏移量制作一个类似的映射,用于驻留在帧中的指针变量

这里的temp指的是无限数量的临时表,这些临时表稍后将被着色到机器寄存器中。我不明白的是:

表示临时映射的好方法是什么?这些临时变量随后被着色到机器寄存器中,这意味着它们引用的是可能只存在于寄存器中而不在堆栈上的已分配块的根。但是这些temp的值在运行时之前是已知的。如何让收集器知道哪个寄存器具有潜在根

即使使用了适当的表示,也可以说,在读取指针映射后,收集器不知何故知道在这个调用站点的ebx和edx中存在潜在的根。收集器在获取该信息时,已经进行了一些计算,可能已经覆盖了ebx和edx中的值!如果收集器首先需要进行一些计算以确定哪些寄存器包含根,那么它应该如何从寄存器中检索潜在根


Re2,一个覆盖数据的收集器不会很流行。最好使用知道如何保存挂起线程的寄存器的方法。