私はかなり標準的なスタック マシン用のコンパイラを書いています。ここで、ガベージ コレクターを追加します。各アクティベーション レコードでどの変数が gc ルートであるかを知るために、ある種の「スタック マップ」を生成できることがわかります。ただし、実行中にスタックにプッシュされた中間値を処理する方法がわかりません。私がコンパイルしている言語は Pascal に似ているので、タグを使用して他のデータ型からのポインターを識別する必要はありません。
方法に関するヒント/ポインタをいただければ幸いです
- 任意の時点でスタック内の gc ルートを見つけます (つまり、スタックにプッシュされた中間値のどれが gc ルートであるかを識別する方法)。
- この情報をエンコードする通常の形式 (つまり、「スタック マップ」を生成してエンコードする方法)
どうもありがとうございました!ニコラス