オブジェクト

数値でない全てのデータは、ヒープにおかれるオブジェクトで表現される。 それぞれのオブジェクトのメモリセルは、オブジェクトヘッダーと オブジェクト変数のための固定数のスロットを持っている。 ベクトルは、任意の要素から構成されるため、 sizeスロットをヘッダーのすぐ後に持っている。 図[*]はオブジェクトとベクトルおよび オブジェクトのヘッダーを描いたものである。 ここに示すslotelementのワードだけがユーザーから アクセスすることができる。

Figure: オブジェクト・ベクトル・オブジェクトヘッダーの構造
\begin{figure}\begin{center}
\epsfile{file=fig/object.ps}
\end{center}
\end{figure}

ヘッダーは、6つの部分で構成されている。 MSBの2ビットmbは、フィボナッチバディメモリ管理手法の中で、 隣接セルの終端を示すために使用される。

mark部分には、3つのマークビットがあり、それぞれ ガーベージコレクタ用のアクセス可能セルの認識、 プリンタ用の環状オブジェクトの認識( #n=#n#表記法でプリントアウトさせた時)、 copy-object用の分割オブジェクトのコピーとして使用される。 elmt部分は、ベクトル要素として使用可能な7つのデータ型( pointer, bit, character, byte, integer, float, foreign-string) のうち1つを識別するために使用される。 しかしながら、elmtはクラスの中で利用可能なため、 クラスの構造と無関係なメモリ管理ができ、 要素の高速なアクセスができる。 bid部分は、メモリセルの物理的大きさを表現する。 31の違った大きさ(16MB以上)のメモリセルをこの5ビットで表現する。 下位のshort word (16ビット)は、クラスID(cid)として使用される。 これは、システムのクラステーブルを経由してオブジェクトのクラスを 引き出すために使用される。 このクラスIDは、伝統的なLispの型tagとみなすことができる。 cidは下位8ビットのみが使用され、上位8ビットは無視される。 したがって、クラスの最大数は256が限界であるけれども、 システムのクラステーブルにもっとメモリを配置するように EusLispを再構築することによって65536まで限界を引き上げることができる。



2016-04-05