Я пишу компилятор для довольно стандартной машины стека. Теперь я хочу добавить сборщика мусора. Я вижу, что я мог бы генерировать какие-то «карты стека», чтобы узнать, какие переменные являются корнями gc в каждой записи активации. Однако я понятия не имею, как справляться с промежуточными значениями, вставленными в стек во время выполнения. Язык, который я компилирую, является Pascal-подобным, поэтому мне не нужен, и я не хочу использовать теги для определения указателей из других типов данных.Как найти корни gc в стековой машине?
Я был бы признателен за любые подсказки/указатели о том, как
- Найти Gc корни в стеке в любой момент времени (то есть, как определить, какие из промежуточных значений, которые были вытеснены в стеке gc).
- Обычные формы, кодирующего эту информацию (то есть, как генерировать и кодировать «стек карты»)
Большое спасибо! Nicolas