私はジレンマに陥っています.VMのループのためのよりパフォーマンスの高いオプションは何でしょうか:
オプション 1 - 命令関数のインラインを強制し、switch に計算された goto を使用して、そのラベルの命令の呼び出し (効果的にインライン化されたコード) に移動します... または...
オプション 2 - それぞれが関数を指している関数ポインターのルックアップ配列を使用しfastcall
、命令がインデックスを決定します。
基本的に、ジャンプアドレスとインラインコードを含むルックアップテーブルまたはfastcall
関数アドレスを含むルックアップテーブルのどちらが良いか. はい、私は知っています、どちらも事実上単なるメモリアドレスであり、前後にジャンプしますfastcall
が、パラメーターにレジスタを使用することを余儀なくされたとしても、レジスタスペースが不足している場合、一部のデータがスタックにプッシュされる可能性があると思います.
コンパイラはGCCです。