私が理解している限りでは、パフォーマンスが向上しないため、C ++で参照によって単純な型を渡すべきではありません。パフォーマンスに悪い(?)。少なくともそれは私がネットから集めることができたものです。
しかし、パフォーマンスが悪い理由を見つけることができません.C ++が変数を検索しすぎるよりも、新しい単純な型を作成する方が速いからですか、それは何ですか?
私が理解している限りでは、パフォーマンスが向上しないため、C ++で参照によって単純な型を渡すべきではありません。パフォーマンスに悪い(?)。少なくともそれは私がネットから集めることができたものです。
しかし、パフォーマンスが悪い理由を見つけることができません.C ++が変数を検索しすぎるよりも、新しい単純な型を作成する方が速いからですか、それは何ですか?
参照を作成すると、次のようになります。
pointer to memory location -> memory location
値を使用する場合は、次のとおりです。
memory location
値はいずれかの方法 (参照または値) にコピーする必要があるため、参照による受け渡しではパフォーマンスは向上しません。追加のルックアップを 1 回行う必要があります。したがって、理論的にはパフォーマンスが「悪化」しますが、気付くほどではありません。
これは良い質問であり、質問しているという事実は、コードに注意を払っていることを示しています。ただし、良いニュースは、この特定のケースでは、簡単な方法があるということです。
Dave Abrahms によるこの優れた記事は、すべての質問に答えています。値渡し。
正直なところ、それを要約するためにリンクの正義を行うわけではありません。これは本当に必読です。ただし、簡単に言えば、コンパイラはそれを正しく実行できるほどスマートであり、手動で実行しようとすると、コンパイラが特定の最適化を実行できなくなる可能性があります。
内部的に参照はポインタで処理され、アクセスするたびに逆参照する必要があります。それには明らかに追加の操作が必要です。
たとえば、32 ビット モードでは、int
サイズは 4 バイトで、int *
ポインターのサイズは 4 バイトです。4 バイトのポインタを渡してからそのポインタでロードするよりも、 4 バイトint
を直接渡す方が高速int
です。