CppCoreGuidelinesは、関数からのアクセスに必要なオーバーヘッドがあるため、小さなオブジェクト(最大2〜3ワード)を参照よりも高速に渡すことができます。あなたは私に説明することができます、この場合のオーバーヘッドはどういうものですか?intよりも値渡しの方が速いのはなぜですか?
答えて
このような参照はインダイレクションを伴い、通常はポインタを使用してシーンの背後に実装されています。そのようなものとして、逆参照操作があります。この操作は、そのような少量のデータで顕著なメリットとは重複しません。
あなたは文字通りにリンクページには、この説明:
コピーが安くなると、何もシンプルさとコピーの安全性を勝るものはありません、と小さなオブジェクトのために、それはまた、より高速です(二、三の言葉まで)関数からアクセスするために余分な間接参照を必要としないため、参照渡し。
私はそれを見ましたが、より議論の的な答え(アセンブラ命令、バイト数の計算など)を期待していました。 – logumanov
@ logumanov:あなたが必要とする議論が何であるか分かりません。インダイレクションにコストがかかることを知るために、そのような低レベルの実装の詳細に入る必要はありません。何も得られません。 –
@ logumanov:私が他のところで言ったように、質問はあまりにも曖昧でした。あなたは文字通り説明自体へのリンクを掲示しました。あなたの質問は「私はこれを理解していません。技術的な詳細についての質問は、もちろんスタックオーバーフローを歓迎しますが、詳細に同じ注意を払って実際に*質問する必要があります! :) –
このドキュメントでは、間接的な追加について説明します。少なくとも、必要のないポインタを逆参照する必要があります。また、どのアプローチが速いのか、どのアプローチが遅いのか(そしてその理由)についても説明します。
これは必ずしもあなたが気にすることを意味するものではありません。あなたがコードの熱い部分にいない限り、その違いはまったく問題になりません。
あなたのコードがconst-correctであり、ある程度の最適化を有効にしている限り(パフォーマンスについて気にするならば)、コンパイラはほぼ確実にこのようなものを最適化します。実際には、実際のオーバーヘッドは、コンパイラが既に最適化している小さなものを「最適化」しようとする無駄な時間です。 – 0x5453
- 1. なぜconst intはconst intより高速ですか?
- 2. Cython:intよりもsize_tが速いのはなぜですか?
- 3. なぜintフィールドのjoin Cint(charフィールド)がintよりもintに高速ですか?
- 4. なぜJava StampedLockがReentrantReadWriteLockよりも速いのですか
- 5. はなぜコード2よりもコード1速いのですか?
- 6. なぜ、このコードは私のものよりも速いのですか?
- 7. `{}`のRコードが `()`のものより速いのはなぜですか?
- 8. ローカル変数アクセスがPythonのクラスメンバーアクセスよりも速いのはなぜですか?
- 9. Windows C++のマルチスレッドIOPSがIOMeterよりも高速なのはなぜですか?
- 10. WindowsでFFTWがLinuxよりも高速なのはなぜですか?
- 11. PublishがXNAのReleaseより速いのはなぜですか?
- 12. ディクショナリがPythonのリストより速いのはなぜですか?
- 13. なぜWebViewはTextViewよりもはるかに高速です
- 14. JTDSがMicrosoft JDBCドライバよりも高速なのはなぜですか?
- 15. 「hash( 'md5'、 'string')」が「md5( 'string')」よりも高速なのはなぜですか?
- 16. MySQLの最適化。なぜoption2がoption1よりも速いのですか
- 17. forループがArray.prototype.map()より速いのはなぜですか
- 18. コアデータがSQLiteより速いのはなぜですか
- 19. Javaでは、値がゼロよりも速いかどうかを、値がゼロに等しいかどうかをチェックするよりも速くチェックしていますか?もしそうなら、なぜですか?
- 20. なぜopenssl_pkey_newはgpgよりもずっと高速ですか?
- 21. TensorflowでKerasよりも2倍速いのはなぜですか?
- 22. 数値データのcickleよりもpickleの方が速いですか?
- 23. なぜ簡単な意思決定ツリーよりも1つの見積もりが速いのですか?
- 24. より速いもの:SqlCommand.Parameters [string]または.Parameters [int]?
- 25. なぜplt.importはplt.pcolorよりもずっと速いのですか?
- 26. foreachループを使用するよりも、AddRangeの方が速いのはなぜですか?
- 27. リスト[Int]の代わりに[List [Int]]型の値を渡す - それはなぜ機能しますか?
- 28. MSMQがWCF QueueServiceより高速なのはなぜですか?
- 29. C#TPLよりもC++ PPLの方が速いですか?
- 30. なぜandroid webviewは、ネイティブのアンドロイドブラウザよりもはるかに低速ですか?
関連性が高い:http://stackoverflow.com/questions/26387569/rule-of-thumb-for-when-passing-by-value-is-faster-than-passing-by-const-referencec – NathanOliver
私は、あなたが尋ねているものが不明確であるため、この質問を閉じるために議決します。あなたが与えている正確なリンクには、正確な答えが含まれています。* "安価なコピー"とはマシンアーキテクチャに依存しますが、 *単語が何であるか、あるいはマシンアーキテクチャーがこのルールに影響を与える理由を理解できない場合は、質問を言い換えるべきです。 –