Ich schreibe einen Compiler für eine ziemlich Standard-Stack-Maschine. Jetzt möchte ich einen Garbage Collector hinzufügen. Ich kann sehen, dass ich eine Art von "Stack-Maps" erzeugen könnte, um zu wissen, welche Variablen in jedem Aktivierungs-Record GC-Wurzeln sind. Ich habe jedoch keine Ahnung, wie man mit Zwischenwerten umgehen soll, die während der Ausführung in den Stapel geschoben werden. Die Sprache, die ich kompiliere, ist Pascal-ähnlich, also brauche ich nicht und ich möchte keine Tags verwenden, um Zeiger von anderen Datentypen zu identifizieren.Wie findet man GC-Wurzeln in einer Stapelmaschine?
würde ich irgendwelche Hinweise/Zeiger auf schätzen, wie man
- Finden gc Wurzeln in dem Stapel an jedem beliebigen Punkt in der Zeit (dh, wie die der Zwischenwerte zu identifizieren, die in dem Stapel geschoben worden sind, sind GC Wurzeln).
- Übliche diese Information zu codieren (das heißt, wie zu generieren und zu kodieren ‚Stapel Karten‘)
Vielen Dank! Nicolas