next up previous contents index
Next: copy_terms() Up: GC Previous: collect_garbage()

  
copy_one_queue()

goal queueを1つコピーする。

1.
コピーする時には、ゴールの末尾よりコピーする。これは、 以下のような理由による。

よって、ゴールスタックの 順にコピーを行うよりも後からコピーを行う方が有利である。

2.
ゴールを1つコピーする(マクロcopy_one_goal())。

(a)
アリティよりゴールレコードサイズを知り、新領域にゴールレコード を確保する。

(b)
next, pred filedをコピーする。旧領域のゴールのnext部には コピー先、pred部には0を代入する。

(c)
引数の末尾よりGC スタックに積むための処理を行う(マクロreserve_copy())。 直接的に純粋未定義変数、ATOMIC、コピー済み参照でなければ 新領域に旧領域の内容をコピー、旧領域に新領域への参照を書き、 新領域へのポインタをスタックに積む。

3.
GC スタックをtopから順に再帰的にコピーする(copy_terms())。



Sekita Daigo
1998-05-18