(57)【特許請求の範囲】
【請求項１】
オブジェクト指向プログラミング言語にて記述されたプログラムを実行するコンピュータシステムであって、
前記プログラムの実行時表現として、型情報ブロックへのポインタであるＴポインタを含むヘッダ及びデータ本体を記述したオブジェクトと、クラス構造体へのポインタであるクラスポインタ及び仮想メソッド表を記述した型情報ブロックと、前記オブジェクトが属すクラスに関する情報を記述したクラス構造体とを所定の記憶手段に格納し、
前記型情報ブロックには最大２m個の前記クラスポインタが重層的に設けられており、前記オブジェクトのヘッダに含まれる前記Ｔポインタの中位のｍ個のビットを用いて前記クラスポインタのいずれかを指すことにより、最大２m個の前記オブジェクトの状態が表現されており、
ＣＰＵが所定のオブジェクトから当該オブジェクトに対応するクラス構造体へアクセスする際に、まず当該オブジェクトに対応する前記型情報ブロックに重層的に設けられた前記クラスポインタのうち、当該オブジェクトのヘッダに含まれるＴポインタにより指されているクロスポインタが参照され、当該クロスポインタに指されているクラス構造体が参照されることを特徴とするコンピュータシステム。
【請求項２】
オブジェクト指向プログラミング言語にて記述されたプログラムをコンピュータシステムにて実行するためのプログラムの実行時表現方法であって、
前記プログラムの実行時表現として、型情報ブロックへのポインタであるＴポインタを含むヘッダ及びデータ本体を記述したオブジェクトと、クラス構造体へのポインタであるクラスポインタを最大２m個重層的に設けると共に仮想メソッド表を記述した型情報ブロックと、前記オブジェクトが属すクラスに関する情報を記述したクラス構造体とを所定の記憶手段に格納し、
ＣＰＵが所定のオブジェクトから当該オブジェクトに対応するクラス構造体へアクセスする際に、まず当該オブジェクトに対応する前記型情報ブロックに重層的に設けられた前記クラスポインタのうち、当該オブジェクトのヘッダに含まれるＴポインタにより指されているクロスポインタが参照され、当該クロスポインタに指されているクラス構造体が参照され、
前記オブジェクトのヘッダに含まれる前記Ｔポインタの中位のｍ個のビットを用いて前記クラスポインタのいずれかを指すことにより、最大２m個の前記オブジェクトの状態を表現することを特徴とするプログラムの実行時表現方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、オブジェクト指向プログラミング言語を実装したコンピュータシステムにおいて、プログラムを実行するためのオブジェクトの実行時表現方法に関する。
【０００２】
【従来の技術】
ＪａｖａやSmalltalk、Ｃ＋＋等のようなオブジェクト指向プログラミング言語をコンピュータシステムに実装した場合、当該プログラム言語で記述されたプログラムを実行するために、実装された当該プログラミング言語の実行環境においてオブジェクトの状態の実行時表現を行うことが不可欠である。そして、このオブジェクトの状態の実行時表現をどのように行うかということが、処理系の実行効率に決定的な影響を与える。
【０００３】
図５は、オブジェクト指向プログラミング言語の実装において、典型的に使用されるオブジェクト配置を示す図である。図５を参照すると、オブジェクト１１０は、ヘッダ１１１とプログラムモジュールの本体１１２とを持ち、ヘッダ１１１中の１ワードを用いて型情報ブロック１２０へのポインタを格納するのが一般的である。
【０００４】
型情報ブロック１２０は、クラスポインタ１２１と仮想メソッド表１２２とによって構成される。クラスポインタ１２１がポイントするのは、オブジェクト１１０のクラスに関する情報を集合したクラス構造体１３０である。クラス構造体１３０には、実行時システムにおける最重要情報が大量に含まれている。
このようなオブジェクト配置において、オブジェクト１１０へのポインタが与えられた場合、クラス構造体１３０のメンバーの参照、または仮想メソッド表１２２の参照という２種類の動作のいずれかが実行される。クラス構造体１３０のメンバーの参照は、キャスト時、複製時、クラスロード時、コンパイル時等、多くの場面で行われる。また、仮想メソッド表１２２の参照は、仮想関数の呼び出し時に行われる。
【０００５】
オブジェクトの状態の実行時表現としては、上述したオブジェクト１１０のヘッダ１１１内のビットを用いるのが単純かつ最速な方法である。この場合、オブジェクト１１０のヘッダ１１１において使用可能なビット数分だけ状態表現を行うことが可能となる。
【０００６】
また、型情報ブロック１２０を適当な境界（例えば３２バイト境界）に配置し、型情報ブロック１２０へのポインタの下位ビット（例えば５ビット）を、オブジェクト１１０の状態の表現に用いる方法がある。この方法では、型情報ブロック１２０へのポインタを取り出すために論理演算が必要である。
図６は、図５のオブジェクト配置において、クラス構造体１３０のオフセットｏにあるメンバーを参照するという動作（動作１）と、仮想メソッド表１２２のインデックスｉのメソッドを呼び出すという動作（動作２）を実行する場合の動作コードの一例を示す図である。図６に示す各コードにおいて、「load」はレジスタの値の読み込み（load r12 [r3]では、r3の値をr12へ読み込む）、「call」はレジスタによる関数の呼び出しを行う。図７は、オブジェクト１１０における型情報ブロック１２０へのポインタの下位ビットを用いてオブジェクト１１０の状態を表現する場合における図６に示す動作コードの変形例を示す図である。
図６と図７とを比較すると、動作１、動作２のいずれの場合も、１行目の
load r12, [r3]
の後に
and r12, ~(2n-1)
という論理演算を行うコードが追加されている。
【０００７】
【発明が解決しようとする課題】
上述したように、オブジェクト指向プログラミング言語をコンピュータシステムに実装した場合に、オブジェクトの状態の実行時表現をどのように行うかということが、処理系の実行効率に大きな影響を与える。そのため、オブジェクトの状態の実行時表現として、高速で、処理系の実行効率への影響をできるだけ小さくすることが望まれる。
【０００８】
しかし、高速な表現方法であるオブジェクトヘッダのビットを用いる方法は、使用可能なビット数が非常に少ないため、現実的ではなかった。
【０００９】
また、型情報ブロックへのポインタの下位ビットを使用する表現方法は、型情報ブロックへのポインタを取り出すために論理演算が必要であるため、型情報ブロックの情報へのアクセスが全体的に遅くなってしまうという問題があった。
【００１０】
そこで本発明は、高速で、処理系の実行効率への影響が極めて小さいオブジェクトの状態の表現方法を提供することを目的とする。
【００１１】
【課題を解決するための手段】
かかる目的のもと、本発明は、オブジェクト指向プログラミング言語を実装したコンピュータシステムにおいて、実装されたこのオブジェクト指向プログラミング言語におけるオブジェクトの実行時表現として、オブジェクトと、型情報ブロックと、クラス構造体とを備え、このオブジェクトは、この型情報ブロックへのポインタを含むヘッダと、データ本体とを備え、この型情報ブロックは、このクラス構造体を指示するクラスポインタと、仮想メソッド表とを備え、この型情報ブロックのクラスポインタは、表現しようとするオブジェクトの状態の数に応じて複数設け、かつ個々のクラスポインタと個々のオブジェクトの状態とを対応付け、このオブジェクトのヘッダに含まれるポインタは、このポインタの下位の数ビットを用いて、複数のクラスポインタを個別に指示することにより、オブジェクトの状態を表現することを特徴としている。
【００１２】
ここで、この型情報ブロックのクラスポインタは、重層的に設けられている。このような構成とすることにより、オブジェクトのヘッダに含まれるポインタのうち、オブジェクトの状態を表現するために必要なビット数を抑えることができる点で好ましい。
【００１３】
またオブジェクトのヘッダに含まれるポインタは、中位のｍ個のビットを用いて、２m個のクラスポインタを指示することにより、２m個のオブジェクトの状態を表現することとしている。
このような構成とすることにより、オブジェクトの状態の判断方法を簡便なビットテストとすることができる点で好ましい。
【００１４】
さらにクラスポインタの数を２m個とし、このクラスポインタのサイズを２nバイトとした場合であって、かつオブジェクトのヘッダに含まれるポインタが型情報ブロックにおける複数のクラスポインタのうちの最高位アドレスのクラスポインタを指す場合において、このポインタの下位の（ｍ＋ｎ）ビットが（２m−１）−（２n−１）となるように、この型情報ブロックを割り当て、このポインタが指すクラスポインタから低位アドレス方向へ２m個のクラスポインタを重層的に配置したことを特徴としている。
このような構成とすれば、オブジェクト内のポインタの（ｍ＋ｎ）ビットから（ｎ＋１）ビットまでのｍビットの値を変更することにより、このポインタが型情報ブロックにおいて重層化されたクラスポインタをスライドするため、効率的にオブジェクトの状態を表現することができる。
【００１５】
また、コンピュータシステムに搭載されて、オブジェクト指向プログラミング言語で記述されたプログラムを実行する仮想マシンにおいて、このオブジェクト指向プログラミング言語におけるオブジェクトの実行時表現として、オブジェクトと、型情報ブロックと、クラス構造体とを備え、このオブジェクトは、この型情報ブロックへのポインタを含むヘッダと、データ本体とを備え、この型情報ブロックは、このクラス構造体を指示するクラスポインタと、仮想メソッド表とを備え、この型情報ブロックのクラスポインタは、表現しようとするオブジェクトの状態の数に応じて複数設け、かつ個々のクラスポインタと個々のオブジェクトの状態とを対応付け、このオブジェクトのヘッダに含まれるポインタは、このポインタの下位の数ビットを用いて、この複数のクラスポインタを個別に指示することにより、このオブジェクトの状態を表現することを特徴としている。
【００１６】
ここで、この仮想マシンにおける記型情報ブロックのクラスポインタは、重層的に設けられている。
このような構成とすることにより、オブジェクトのヘッダに含まれるポインタのうち、オブジェクトの状態を表現するために必要なビット数を抑えることができる。
【００１７】
また、本発明は、オブジェクト指向プログラミング言語を実装したコンピュータシステム上で、実装されたこのオブジェクト指向プログラミング言語におけるオブジェクトを実行する際の当該オブジェクトの実行時表現方法において、オブジェクトと、このオブジェクトの状態に対応してクラスポインタを複数設けた型情報ブロックと、このクラスポインタによって指示されるクラス構造体とを備えた実行時表現方法を実現するために、クラスポインタの数を２m個とし、このクラスポインタのサイズを２nバイトとした場合であって、かつこのオブジェクトのヘッダに含まれるポインタがこの型情報ブロックにおける複数のクラスポインタのうちの最高位アドレスのクラスポインタを指す場合において、このポインタの下位の（ｍ＋ｎ）ビットが（２m−１）−（２n−１）となるように、型情報ブロックを割り当て、このポインタが指すクラスポインタから低位アドレス方向へ２m個のクラスポインタを重層的に配置し、オブジェクトのヘッダに含まれる型情報ブロックへのポインタの値を、このオブジェクトの現時点の状態に対応付けられたクラスポインタを指し示す値に設定することを特徴としている。
【００１８】
ここで、このオブジェクトのヘッダに含まれる型情報ブロックへのポインタにおける下位（ｍ＋ｎ）ビットの値は、初期的には上位ｍ桁が１、下位ｎ桁が０であり、オブジェクトの状態の変化に応じて、この状態に対応するクラスポインタを指すようにこのポインタの下位（ｍ＋ｎ）ビットの値を変化させることを特徴としている。
このような構成とすれば、ビットのクリア及び簡便なビットテストにより、オブジェクトの状態の変化を表現し、状態を判別することができる点で好ましい。ポインタにおいて、実際に状態を特定するために変化させる値は、このポインタの下位（ｍ＋ｎ）ビットのうちの上位ｍ桁の値とすることができる。
【００１９】
コンピュータに実行させるプログラムを当該コンピュータの入力手段が読取可能に記憶した記憶媒体において、このコンピュータに実装されたオブジェクト指向プログラミング言語におけるオブジェクトの実行時表現として、オブジェクトと、型情報ブロックと、クラス構造体とを備え、このオブジェクトは、この型情報ブロックへのポインタを含むヘッダと、データ本体とを備え、この型情報ブロックは、このクラス構造体を指示するクラスポインタと、仮想メソッド表とを備え、この型情報ブロックのクラスポインタは、表現しようとするオブジェクトの状態の数に応じて重層的に設け、かつ個々のクラスポインタと個々のオブジェクトの状態とを対応付け、このオブジェクトのヘッダに含まれるポインタは、このポインタの下位の数ビットを用いて、この複数のクラスポインタを個別に指示することにより、このオブジェクトの状態を表現する、このオブジェクト指向プログラミング言語の処理系を実現するソフトウェアプロダクトを格納したことを特徴としている。
このような構成とすれば、このソフトウェアプロダクトをインストールした全てのコンピュータシステムにおいて、型情報ブロックの重層化されたクラスポインタを用いたオブジェクトの状態表現を行うことができる点で好ましい。
【００２０】
ここで、このソフトウェアプロダクトにおけるオブジェクトのヘッダに含まれるポインタは、中位のｍ個のビットを用いて、２m個の前記クラスポインタを指示することにより、２m個の前記オブジェクトの状態を表現することを特徴としている。
【００２１】
さらにまた、このソフトウェアプロダクトは、クラスポインタの数を２m個とし、このクラスポインタのサイズを２nバイトとした場合であって、かつオブジェクトのヘッダに含まれるポインタがこの型情報ブロックにおける複数のクラスポインタのうちの最高位アドレスのクラスポインタを指す場合において、このポインタの下位の（ｍ＋ｎ）ビットが（２m−１）−（２n−１）となるように、この型情報ブロックを割り当て、このポインタが指すクラスポインタから低位アドレス方向へ２m個のクラスポインタを重層的に配置することを特徴としている。
【００２２】
また、本発明は、コンピュータに実装されたオブジェクト指向プログラミング言語におけるオブジェクトの実行時表現として、オブジェクトと、型情報ブロックと、クラス構造体とを備え、このオブジェクトは、この型情報ブロックへのポインタを含むヘッダと、データ本体とを備え、この型情報ブロックは、このクラス構造体を指示するクラスポインタと、仮想メソッド表とを備え、この型情報ブロックのクラスポインタは、表現しようとするオブジェクトの状態の数に応じて重層的に設け、かつ個々のクラスポインタと個々のオブジェクトの状態とを対応付け、このオブジェクトのヘッダに含まれるポインタは、このポインタの下位の数ビットを用いて、この複数のクラスポインタを個別に指示することにより、このオブジェクトの状態を表現する、このオブジェクト指向プログラミング言語の処理系を実現するソフトウェアプロダクトを記憶する記憶手段と、この記憶手段からこのプログラムを読み出してこのプログラムを送信する送信手段とを備えたことを特徴としている。
このような構成とすれば、このソフトウェアプロダクトをダウンロードして実行する全てのコンピュータシステムにおいて、型情報ブロックの重層化されたクラスポインタを用いたオブジェクトの状態表現を行うことができる点で好ましい。
【００２３】
ここで、このソフトウェアプロダクトにおけるオブジェクトのヘッダに含まれる前記ポインタは、中位のｍ個のビットを用いて、２m個のクラスポインタを指示することにより、２m個の前記オブジェクトの状態を表現することを特徴としている。
【００２４】
さらにここで、このソフトウェアプロダクトは、クラスポインタの数を２m個とし、このクラスポインタのサイズを２nバイトとした場合であって、かつオブジェクトのヘッダに含まれるポインタがこの型情報ブロックにおける複数のクラスポインタのうちの最高位アドレスのクラスポインタを指す場合において、このポインタの下位の（ｍ＋ｎ）ビットが（２m−１）−（２n−１）となるように、この型情報ブロックを割り当て、このポインタが指すクラスポインタから低位アドレス方向へ２m個のクラスポインタを重層的に配置することを特徴としている。
【００２５】
【発明の実施の形態】
以下、添付図面に示す実施の形態に基づいてこの発明を詳細に説明する。
図１は、本実施の形態におけるオブジェクト指向プログラミング言語を実装したコンピュータシステムにおいて使用されるオブジェクト配置を示す図である。オブジェクト指向プログラミング言語の実装は、図８に示すように、仮想マシンやコンパイラ等によって提供されるプログラミング言語の処理系（図示の例ではＪａｖａ及びSmalltalkの仮想マシン）をコンピュータシステムに搭載することにより実現される。図１に示すプログラムのデータ構造は、図８に示すように、ＯＳに管理されているＣＰＵの作業領域としての記憶手段であるＲＡＭに格納され、このＣＰＵによって実行される。
【００２６】
図１において、符号１０はオブジェクト、符号２０は型情報ブロック、符号３０はクラス構造体である。
オブジェクト１０は、ヘッダ１１とプログラムモジュールの本体１２とで構成され、ヘッダ１１は型情報ブロック２０へのポインタ（以下、Ｔポインタと称す）を格納する。
【００２７】
型情報ブロック２０は、クラスポインタ部２１と仮想メソッド表２２とで構成される。図２は、型情報ブロック２０の構成を説明する図である。
図２を参照すると、クラスポインタ部２１は、図５に示した従来の型情報ブロック１２０におけるクラスポインタ１２１を低位アドレス方向に重層的に拡張したものである。これにより、クラスポインタ部２１には複数のクラスポインタが設定される。そして、この複数のクラスポインタを表現したいオブジェクトの状態に対応させる。すなわち、２m個のオブジェクトの状態を表現しようとする場合、クラスポインタ部２１には、これに対応して２m個のクラスポインタが設定されることとなる。図２の例では、４個（ｍ＝２）のクラスポインタ２１ａ〜２１ｄが設定されている。
【００２８】
本実施の形態は、上記の型情報ブロック２０の構成を利用し、オブジェクト１０のヘッダ１１の所定のビットを用いてオブジェクトの状態を表現する。２m個のオブジェクトの状態は、ｍ個のビットを用いて表現することができる。使用するビットは、型情報ブロック２０のクラスポインタ部２１における各クラスポインタ２１ａ〜２１ｄのサイズを２nバイトとすると、Ｔポインタの下位のｍ個のビット（（ｍ＋ｎ）ビットから（ｎ＋１）まで）である。
これらのビットの値は、初期状態において、全てセットされている（「１」になっている）。そして、状態の遷移を状態ビットのクリアで表し（「０」にする）、状態の判定をビットのテストによって行う。この状態判定は、従来の技術で説明した、オブジェクト１１０のヘッダ１１１内のビットのみを用いてオブジェクト１１０の状態を表現する場合と同様にきわめて簡便である。
【００２７】
次に、型情報ブロック２０の構成方法を説明する。上述したように、クラスポインタ部２１は、クラスポインタ２１ａ〜２１ｄを、クラスポインタ２１ａから低位アドレス方向に重層的に拡張して形成されている。ここで、オブジェクト１０のヘッダ１１における型情報ブロック２０へのＴポインタのうちで、最高位アドレスのクラスタポインタ２１ａを指すＴポインタを基底Ｔポインタと呼ぶことにする。
このように定義された基底Ｔポインタの下位（ｍ＋ｎ）ビットが、
（２m−１）−（２n−１）
になるように型情報ブロック２０を割り当てる。
そして、この基底Ｔポインタの指すアドレスから低位アドレス方向に２m個のクラスポインタを重層的に配置する。
図１及び図２は、ｍ＝２、ｎ＝２の場合の例であり、基底Ｔポインタの下位（２＋２）ビットは１１００であり、４（＝２2）個のクラスポインタ２１ａ〜２１ｄが配置されている。
【００２８】
このように型情報ブロック２０を構成することにより、以上の構成法により、オブジェクト１０のヘッダ１１が初期化されたときは、基底Ｔポインタがヘッダ１１に格納されることになる。この後、当該オブジェクト１０の状態の変化に応じて、型情報ブロック２０へのＴポインタの値は変化するが、常に重層化されたクラスポインタ２１ａ〜２１ｄのいずれかにスライドされることとなる。
【００２９】
以上のように、クラスポインタ２１ａ〜２１ｄにアクセスする場合、クラスポインタ２１ａ〜２１ｄの値は、重層構造によりＴポインタから即座に獲得することができる。したがって、オーバヘッドはゼロである。
これに対し、仮想メソッド表２２にアクセスする場合は、アクセスに先立って、Ｔポインタを基底Ｔポインタに変換する必要がある。具体的には、その時点でのＴポインタの値と基底Ｔポインタの下位（ｍ＋ｎ）ビットの値
（２m−１）−（２n−１）
との論理和を取ることになる。このため、図５に示した従来の技術において、型情報ブロック１２０へのポインタの下位ビットを用いてオブジェクト１１０の状態を表現する場合と同様のオーバヘッドが生ずる。
【００３０】
図３は、本実施の形態において、オブジェクト１０のヘッダ１１におけるＴポインタの下位（ｍ＋ｎ）ビットを用いてオブジェクト１０の状態を表現する場合における図６に示す動作コードの変形例を示す図である。
図３と図６とを比較すると、クラス構造体３０のオフセットｏにあるメンバーを参照する動作１では、同一のコードとなっているが、仮想メソッド表２２のインデックスｉのメソッドを呼び出す動作２では、１行目の
load r12, [r3]
の後に
or r12,(2m-1)-(2n-1)
という論理演算を行うコードが追加されている。
【００３１】
このように、多くの重要データを含むクラス構造体３０へのアクセス性能が低下しない。したがって、Ｊａｖａ等のように、主としてクラスポインタ２１ａ〜２１ｄへのアクセスを行い仮想メソッド表２２へのアクセス頻度が少ない言語や処理系では、実行効率の大きな低下を招くことはない。しかしながら、言語または処理系によっては、実行効率に対して大きな影響を与える可能性は否定できない。
【００３２】
ただし、オブジェクト１０のヘッダ１１におけるＴポインタが基底Ｔポインタからほとんど動かない、すなわち、オブジェクト１０の状態がほとんど変化せず、Ｔポインタの指示先がクラスポインタ２１ａから動かない場合、命令レベル並列実行機能を有するプロセッサと分岐予測を行うハードウェアとを有する場合は、偏った分岐特性を利用することにより、実行性能への影響を小さくすることができる。
【００３３】
図４は、偏った分岐特性を利用しない場合のコード列（以下、コード列１）と、偏った分岐特性を利用した場合のコード列（以下、コード列２）を対比する図である。なお、図４に示す各コードにおいて、「lwz」は図３の「load」に、「ori」は図３の「or」に、「mtctr」は図３の「call」に相当する。また、「cmp」はレジスタの値を比較し、「be+」は「cmp」における比較結果を呼び出し、「mr」はレジスタの値を移動する。
図４を参照すると、コード列２は、コード列１とを比べると、３行目の
retry:cmp cr0, r12, r0
と、５行目から７行目の
be+ docall
mr r0, r12
b retry
が追加されている。また、
mtctr r0
は、ＣＰＵの分岐予測により、
be+ docall
で投機的に実行される。
【００３４】
ここで、コード列１では、当該コード列を実行する場合、mtctrに到達するまでに、lwzで２サイクル、oriで１サイクル、lwzで２サイクルの合計５サイクルを要する。そして、この３個の命令にはデータ依存があるため、並列に実行することはできず、必ず５サイクルで実行されることとなる。
これに対し、コード列２では、lwz（２サイクル）→ ori（１サイクル）→ cmp（１サイクル）→ lwz（２サイクル）→ be（１サイクル）→ mtctrの順に実行される。ここで、ori（１サイクル）→ cmp（１サイクル）は二つ目のlwzと並列に実行される。また、beは分岐予測ハードウェアによる予測がほとんど的中するため、実際にはほぼ０サイクルになると考えられる。したがって、ほぼ４サイクルで実行されることとなる。
【００３５】
このように偏った分岐特性を利用した並列処理を実行することで、実行性能の低下を低減することが可能となる。
【００３６】
【発明の効果】
以上説明したように、本発明によれば、オブジェクトの状態を表現する上で、高速で、処理系の実行効率への影響が極めて小さい表現方法を実現することができる。
【図面の簡単な説明】
【図１】  本実施の形態におけるオブジェクト指向プログラミング言語を実装したコンピュータシステムにおいて使用されるオブジェクト配置を示す図である。
【図２】  本実施の形態における型情報ブロックの構成を説明する図である。
【図３】  本実施の形態において型情報ブロックへのポインタの下位（ｍ＋ｎ）ビットを用いてオブジェクトの状態を表現する場合における図６に示す動作コードの変形例を示す図である。
【図４】  偏った分岐特性を利用しない場合のコード列と偏った分岐特性を利用した場合のコード列とを対比する図である。
【図５】  従来のオブジェクト指向プログラミング言語の実装において、典型的に使用されるオブジェクト配置を示す図である。
【図６】  クラス構造体のオフセットｏにあるメンバーを参照するという動作（動作１）と、仮想メソッド表のインデックスｉのメソッドを呼び出すという動作（動作２）を実行する場合の動作コードの一例を示す図である。
【図７】  型情報ブロックへのポインタの下位ビットを用いてオブジェクトの状態を表現する場合における図６に示す動作コードの変形例を示す図である。
【図８】  仮想マシンを搭載することによりオブジェクト指向プログラミング言語をコンピュータシステムに実装した様子を説明する図である。
【符号の説明】
１０…オブジェクト、１１…ヘッダ、１２…本体、２０…型情報ブロック、２１…クラスポインタ部、２１ａ、２１ｂ、２１ｃ、２１ｄ…クラスポインタ、２２…仮想メソッド表、３０…クラス構造体
【図１】
0003896238.tif 000002
【図２】
0003896238.tif 000003
【図３】
0003896238.tif 000004
【図４】
0003896238.tif 000005
【図５】
0003896238.tif 000006
【図６】
0003896238.tif 000007
【図７】
0003896238.tif 000008
【図８】
0003896238.tif 000009