私はCで仮想マシンを作成しました。この仮想マシンには、VMのオペコードの機能を提供する関数へのポインターが入力された呼び出しテーブルがあります。仮想マシンが実行されると、最初にプログラムが解釈され、提供されたオペコードの呼び出しテーブルに適切な関数に対応するインデックスの配列が作成されます。次に、配列をループして、最後に到達するまで各関数を呼び出します。
各命令は非常に小さく、通常は1行です。インライン化に最適です。問題は、実行時に決定されるため、コンパイラが仮想マシンの命令がいつ呼び出されるかを認識しないため、それらをインライン化できないことです。関数呼び出しと引数の受け渡しのオーバーヘッドにより、VMのパフォーマンスが低下しています。これを回避する方法について何かアイデアはありますか?