C の仮想関数のパフォーマンスへの影響
クラス設計における仮想関数のパフォーマンスへの影響について懸念を表明しました。これは正当な懸念ですか? それとも時期尚早の最適化と考えられますか?
ご質問に対処するために、3 GHz PowerPC CPU でパフォーマンス テストを実施しました。 get/set 関数を備えた単純な 4D ベクトル クラスを作成しました。インライン、仮想、および通常の関数呼び出しとして定義された関数を使用してテストを実行しました。
結果は次のとおりです:
この場合、L1 キャッシュにデータが収まったため、仮想関数呼び出しはインライン呼び出しよりも約 20 倍遅くなります。ただし、このパフォーマンスの違いのコンテキストを考慮することが重要です。
テスト ループの各反復には 12,288 回の関数呼び出しが含まれていました。したがって、仮想ループは直接ループよりも 92 ミリ秒長くかかり、関数呼び出しごとにわずか 7 ナノ秒の追加オーバーヘッドが発生しました。
これらの結果に基づいて、次のように結論付けられます。
極端なパフォーマンスを最適化する場合を除き、ほとんどの状況では、カプセル化と柔軟性のために仮想関数を使用することに関連するトレードオフの方が、潜在的なパフォーマンス上の懸念よりも重要です。
以上がC の仮想関数はパフォーマンスのボトルネックですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。