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