1

誰か、次のうちどれがより高速で、その理由を教えてください??

int add(int a, int b){
     return a+b;
}

また

void add(int a, int *b){
     *b = a+(*b);
}
4

3 に答える 3

5

関数がインライン化され、どちらも同じ生成コードになる可能性があります。

于 2012-06-02T04:31:42.687 に答える
2

コードを見てどちらが速いかを推測しようとするのではなく、検討中のオプションをプロファイリングして、一方が他方よりも速いかどうか、そしてそれが実際に違いを生むかどうかを確認してください。あなたの例については、最近のほとんどのコンパイラが戻り値と名前付き戻り値optimzationを実行するため、値で返すことはまったく問題ないと思います。これはコピー省略の形式です。その上、C++11 では移動セマンティクスが導入されています。つまり、該当する場合、データは一時データからターゲットに「移動」されます。したがって、実際には、入力をチェックする必要がないため、値で返す方が速い場合があります。

渡しに関する関連する議論については、こちらを参照してください。関連する質問については、こちらを参照してください。

于 2012-06-02T06:22:28.583 に答える
0

値は通常レジスタに返されるため、値を返すのが保存よりも遅くなる可能性はほとんどありません(通常、CPUにアキュムレータがあり、戻り値が収まる場合はアキュムレータ)。

于 2012-06-02T04:37:21.653 に答える