2017-01-06 19 views
-2

CppCoreGuidelinesは、関数からのアクセスに必要なオーバーヘッドがあるため、小さなオブジェクト(最大2〜3ワード)を参照よりも高速に渡すことができます。あなたは私に説明することができます、この場合のオーバーヘッドはどういうものですか?intよりも値渡しの方が速いのはなぜですか?

+2

関連性が高い:http://stackoverflow.com/questions/26387569/rule-of-thumb-for-when-passing-by-value-is-faster-than-passing-by-const-referencec – NathanOliver

+2

私は、あなたが尋ねているものが不明確であるため、この質問を閉じるために議決します。あなたが与えている正確なリンクには、正確な答えが含まれています。* "安価なコピー"とはマシンアーキテクチャに依存しますが、 *単語が何であるか、あるいはマシンアーキテクチャーがこのルールに影響を与える理由を理解できない場合は、質問を言い換えるべきです。 –

答えて

4

このような参照はインダイレクションを伴い、通常はポインタを使用してシーンの背後に実装されています。そのようなものとして、逆参照操作があります。この操作は、そのような少量のデータで顕著なメリットとは重複しません。

あなたは文字通りにリンクページには、この説明:

コピーが安くなると、何もシンプルさとコピーの安全性を勝るものはありません、と小さなオブジェクトのために、それはまた、より高速です(二、三の言葉まで)関数からアクセスするために余分な間接参照を必要としないため、参照渡し。

+0

私はそれを見ましたが、より議論の的な答え(アセンブラ命令、バイト数の計算など)を期待していました。 – logumanov

+2

@ logumanov:あなたが必要とする議論が何であるか分かりません。インダイレクションにコストがかかることを知るために、そのような低レベルの実装の詳細に入る必要はありません。何も得られません。 –

+1

@ logumanov:私が他のところで言ったように、質問はあまりにも曖昧でした。あなたは文字通り説明自体へのリンクを掲示しました。あなたの質問は「私はこれを理解していません。技術的な詳細についての質問は、もちろんスタックオーバーフローを歓迎しますが、詳細に同じ注意を払って実際に*質問する必要があります! :) –

5

このドキュメントでは、間接的な追加について説明します。少なくとも、必要のないポインタを逆参照する必要があります。また、どのアプローチが速いのか、どのアプローチが遅いのか(そしてその理由)についても説明します。

これは必ずしもあなたが気にすることを意味するものではありません。あなたがコードの熱い部分にいない限り、その違いはまったく問題になりません。

+2

あなたのコードがconst-correctであり、ある程度の最適化を有効にしている限り(パフォーマンスについて気にするならば)、コンパイラはほぼ確実にこのようなものを最適化します。実際には、実際のオーバーヘッドは、コンパイラが既に最適化している小さなものを「最適化」しようとする無駄な時間です。 – 0x5453

関連する問題