私が現在扱っているアプリケーションでは、何十億という小さな関数を何度も呼び出すいくつかの力任せの数値アルゴリズムを使用しています。傾斜と静的多型を使った関数呼び出しをなくすことで、パフォーマンスをどれだけ向上させることができるのか、私は迷っていました。関数呼び出しコスト
次のような状況で非インラインおよび非組み込み関数を呼び出す機能を相対的に呼び出しのコストは何ですか:
1)関数呼び出し関数ポインタを経由して
2)仮想関数呼び出し
私はそれを測定するのは難しいと知っていますが、非常に大まかな見積もりがあります。
ありがとうございました!仮想関数コンパイラを呼び出すために
Fetch address of function -> Call function
はする必要があります::仮想メカニズムはコンパイラの実装の詳細であること、だから、実装:
Fetch address of vptr -> Fetch address of the function -> Call function
注意をメンバ関数の呼び出しコンパイラがする必要があるようにするに
現代のコンパイラは、最近、 'inline'を指定しなくても小さな関数をインラインでインライン展開します。アプリケーションをプロファイリングしたり、生成されたアセンブリ(最適化スイッチをオンにして構築)を見ましたか?そして、コード/コンパイラの設定を見ることなく、私たちが言うことは何でも投機的です。 –
プロファイリングとボトルネックを探すのはどうですか? – littleadv
@In silico。投機は、問題を理解している人から来ている限り、問題ありません。私はasmを知らない。 – pic11