8

私が理解している限りでは、パフォーマンスが向上しないため、C ++で参照によって単純な型を渡すべきではありません。パフォーマンスに悪い(?)。少なくともそれは私がネットから集めることができたものです。

しかし、パフォーマンスが悪い理由を見つけることができません.C ++が変数を検索しすぎるよりも、新しい単純な型を作成する方が速いからですか、それは何ですか?

4

4 に答える 4

7

参照を作成すると、次のようになります。

pointer to memory location -> memory location

値を使用する場合は、次のとおりです。

memory location

値はいずれかの方法 (参照または値) にコピーする必要があるため、参照による受け渡しではパフォーマンスは向上しません。追加のルックアップを 1 回行う必要があります。したがって、理論的にはパフォーマンスが「悪化」しますが、気付くほどではありません。

于 2012-05-26T23:07:26.483 に答える
4

これは良い質問であり、質問しているという事実は、コードに注意を払っていることを示しています。ただし、良いニュースは、この特定のケースでは、簡単な方法があるということです。

Dave Abrahms によるこの優れた記事は、すべての質問に答えています。値渡し。

正直なところ、それを要約するためにリンクの正義を行うわけではありません。これは本当に必読です。ただし、簡単に言えば、コンパイラはそれを正しく実行できるほどスマートであり、手動で実行しようとすると、コンパイラが特定の最適化を実行できなくなる可能性があります。

于 2012-05-27T02:08:31.900 に答える
0

内部的に参照はポインタで処理され、アクセスするたびに逆参照する必要があります。それには明らかに追加の操作が必要です。

于 2012-05-26T23:06:32.507 に答える
0

たとえば、32 ビット モードでは、intサイズは 4 バイトで、int *ポインターのサイズは 4 バイトです。4 バイトのポインタを渡してからそのポインタでロードするよりも、 4 バイトintを直接渡す方が高速intです。

于 2012-05-26T23:06:40.667 に答える