ホームページ  >  記事  >  バックエンド開発  >  C の仮想関数はパフォーマンスのボトルネックですか?

C の仮想関数はパフォーマンスのボトルネックですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-19 08:33:02610ブラウズ

Are Virtual Functions in C   a Performance Bottleneck?

C の仮想関数のパフォーマンスへの影響

クラス設計における仮想関数のパフォーマンスへの影響について懸念を表明しました。これは正当な懸念ですか? それとも時期尚早の最適化と考えられますか?

ご質問に対処するために、3 GHz PowerPC CPU でパフォーマンス テストを実施しました。 get/set 関数を備えた単純な 4D ベクトル クラスを作成しました。インライン、仮想、および通常の関数呼び出しとして定義された関数を使用してテストを実行しました。

結果は次のとおりです:

  • インライン: 8ms (呼び出しごとに 0.65ns)
  • 直接: 68ms (呼び出しごとに 5.53ns)
  • 仮想: 160ms (呼び出しごとに 13ns)

この場合、L1 キャッシュにデータが収まったため、仮想関数呼び出しはインライン呼び出しよりも約 20 倍遅くなります。ただし、このパフォーマンスの違いのコンテキストを考慮することが重要です。

テスト ループの各反復には 12,288 回の関数呼び出しが含まれていました。したがって、仮想ループは直接ループよりも 92 ミリ秒長くかかり、関数呼び出しごとにわずか 7 ナノ秒の追加オーバーヘッドが発生しました。

これらの結果に基づいて、次のように結論付けられます。

  • 仮想関数は確かに直接関数よりも遅いです。
  • 非常に頻繁に (1 秒あたり数百万回程度) 呼び出すつもりがない限り、パフォーマンスの低下は無視できます。

極端なパフォーマンスを最適化する場合を除き、ほとんどの状況では、カプセル化と柔軟性のために仮想関数を使用することに関連するトレードオフの方が、潜在的なパフォーマンス上の懸念よりも重要です。

以上がC の仮想関数はパフォーマンスのボトルネックですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。