パフォーマンス関数の観点から分岐関数呼び出しの最適な実装は何ですか?分岐最適化
単純なケースでは、バイトコードを解釈し、コードに応じて関数呼び出しを実行するかなり大きなswitch文があります。
普通のケースでは、同じことをするgotosとラベルを計算しました。
これを行うための最善の方法は何ですか?
抽象たとえば、
schedule: swap_entity(); goto *entity_start(); lb_code1: do_stuff(); goto *next_code_item(); lb_code2: do_stuff(); goto *next_code_item(); ...
編集:への私の参照おそらくやや誤った「分岐関数が呼び出されます」。分岐コード実行。
AFAIKは、JITコンパイルよりも優れています。理想的には、ランタイム情報を使用して不必要なコードをすべて削除する最適化があります。 しかし、基本的には、「絶対ベスト」。 Pfft。決してそれを見たことはない。 – gimpf
コンパイル(コード生成、JITなど)が「絶対的にベスト」であることに合意しました。関数ポインタの配列へのインデックス付けは、opsがすべて同じ型を持つ場合に機能します。 –
絶対最善の言葉はおそらく愚かではあるが、「より速い方法」がより正確になるだろう。 – psyeugenic