仮想スタックマシンの問題点
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/02/10 20:03 UTC 版)
「スタックマシン」の記事における「仮想スタックマシンの問題点」の解説
仮想スタックマシン向けにプログラムをコンパイルすると、レジスタマシン向けよりも(コードサイズは小さくとも)命令数が多くなる。仮想スタックマシンを実装したインタプリタは、命令コードに従って分岐して対応する命令コードの処理を行う。また、スレッデッドコードで実装した場合も頻繁に分岐を繰り返すことになる。インタプリタの分岐先は命令コードの種類という膨大な数であり、その様な分岐を効率よく行うため、間接分岐命令が使われる。ところが初期の分岐予測機構では、間接分岐命令への対応が欠けている。このため、仮想スタックマシンの命令をデコードして実行するたびに、ホストマシンのパイプラインは誤った分岐先を投機実行し、修正のためリスタートすることになる。個々の命令が単純で命令数が多くなるため、そのような状況はスタックマシン以外の仮想機械よりも仮想スタックマシンで発生しやすいと言われている。AndroidのDalvik仮想マシンはJavaを実行するが、本来のJava仮想マシンが8ビットのスタックマシンなのに対して、16ビットのレジスタマシンとなっている。これにより命令数を少なくし、命令コードディスパッチでのストールを低減している。算術命令は4ビット(以上)のオペランドを使って直接局所変数をフェッチまたはストアすることができる。
※この「仮想スタックマシンの問題点」の解説は、「スタックマシン」の解説の一部です。
「仮想スタックマシンの問題点」を含む「スタックマシン」の記事については、「スタックマシン」の概要を参照ください。
- 仮想スタックマシンの問題点のページへのリンク