言語理論とコンパイラ

第十三回: 実行環境、仮想計算機、ゴミ集め、動的コンパイラ

2006 年 7月14日

http://www.sw.it.aoyama.ac.jp/2006/Compiler/lecture13.html

AGU

© 2006 Martin J. Dürst 青山学院大学

目次

期末試験について

日時: 7月28日 (金曜日) 11:10-12:35 (85分)

全体の資料

2005 年の試験問題 (問題の番号などが見えるようにするには最新のブラウザ (例えば Opera) が必要。 解答 (例) を見るにはスタイルシートを切り替える必要がある。)

先週の宿題

問題: if (a==5 || b==10) { c = 12; }超単純アセンブリ言語に変換 (コード生成) する

        LOAD    R1, a
        CONST   R2, 5
        SUB     R1, R1, R2
        JUMP=   R1, if1
        LOAD    R1, b
        CONST   R2, 10
        SUB     R1, R1, R2
        JUMP!=  R1, else1
if1:    CONST   R1, 12
        STORE   c, R1
else1:

再配置可能プログラム

実行環境

コンパイラと一緒に用意する必要がある

従来の動的メモリの仕組み

ゴミ集めの仕組み

ゴミ集めの手法

要点: できるだけ普通の処理と同時に少しづつ進める

  1. 動的メモリの部分が参照されている数 (reference count) を記録・更新り、0 になったらゴミとして集める。
  2. 印掃式 (mark and sweep): 全ての動的メモリの部分に印を付けて、これを最初に off にする。静的メモリなどから参照可能な動的メモリの部分の印を on にする。印が off になっている部分をゴミとして集める。
  3. 複写式 (copy): 動的メモリ領域を二つ用意して、参照されている動的メモリの部分をコピーする。

仮想計算機

動的コンパイル