7.2.3 假想メモリーセグメント / 非公式訳

p.132

7.2.3 假想メモリーセグメント

(略)

高水準言語は、xysumcountなどの記号変数が使えます。オブジェクトベース言語の場合、こうした変数はそれぞれ、静的変数(クラスレベル)、フィールド(オブジェクトのインスタンスレベル)、ローカル変数または引数変数(メソッドレベル)のいずれかに分類されます(訳註: 静的変数はクラスに紐づけられる変数。だから同じクラスから実体化したオブジェクト同士で共有される。フィールドは個々のインスタンスに紐づけられるいわゆるメンバー変数のこと。ローカル変数、引数変数は、函数内やループ内でのみ生きている変数のこと)。JavaJVMのような假想マシンや、本書で作るVMモデルには、記号変数はありません。その代わりそれぞれの変数は、staticthislocalargumentなどの名前を持つ假想メモリーセグメント内のエントリーとして表現されます。あとの章で説明しますが、高水準プログラミング言語に登場する第1静的変数、第2静的変数、第3静的変数、...については、コンパイラーによってstatic 0static 1static 2、...にマップされます。他の変数も同様に、thislocalargumentという各メモリーセグメントにマップされます。たとえばローカル変数xとフィールドyとがそれぞれlocal 1this 3とにマップしてある場合、let x = yのような高水準言語の文はコンパイラーによってpush this 3 (yをスタックにプッシュして)、pop local 1 (そのyxにポップする)に変換されます。本書で作るVMモデルには合わせて8つのメモリーセグメントがあります。それぞれの名前と役割とを図7.4に示します。

(略)

セグメント: 役割
argument: 函数の引数
local: 函数のローカル変数
static: 函数が参照する静的変数
constant: 定数(0~32767)
this: 後述
that: 後述
pointer: 後述
temp: 後述
図7.4 假想メモリーセグメント