命令の粒度
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/07/01 20:16 UTC 版)
レジスタマシン型命令セットではオペランドの位置を命令内で明示する。これに対しスタックマシン型命令セットでは、暗黙のうちにスタックトップをオペランドとして使い、オペランドの位置を明示する領域が不要である。目的のオペランドがスタックトップにない場合にはオペランド移動のための命令を追加する。大まかに言えば、スタックマシン命令一個当たりの長さと機能は、レジスタマシン一命令内の個々のオペランドフィールド一個、またはコードフィールドと同等である。 このためバイトコード全体の長さには大きな差はでなさそうだが、命令の順序を並び換えることにより、オペランド移動をスタックマシンでは省略できる。レジスタマシンではオペランド指定は省略できないので、オペランド移動を省略した分だけスタックマシンの方が同等のプログラムを短く記述できる場合が多い。キャッシュへのヒット率が高まるので、プログラムサイズの削減は実効速度の増加にもなる。 しかしオペランド移動の省略を施しても、スタックマシンの方がレジスタマシンより命令数が多くなる。個々の命令が極めて単純な処理しか行わないバイトコードインタプリタでは、命令の種類を判定して分岐する処理が実行時間の大きな割合を占めるので、この点ではレジスタマシンの方が有利となる。
※この「命令の粒度」の解説は、「バイトコード」の解説の一部です。
「命令の粒度」を含む「バイトコード」の記事については、「バイトコード」の概要を参照ください。
- 命令の粒度のページへのリンク