大きなパラメーターの値渡し

パラメーターが非効率的な方法で渡されています。

C/C++ では、パラメーターは値渡しです。つまり、呼び出しでは、実際のパラメーターの内容が仮パラメーターにコピー (代入) されます。パラメーターが大きい場合、このコピーにはコストがかかります。通常、16 バイトを超える引数は参照渡しにしたほうが良いでしょう。つまり、オブジェクト自体を渡すのではなく、オブジェクトへのポインターを渡します。

C++ では、仮パラメーター型 T を T& に置換して REF パラメーターを宣言できます。呼び出し引数とサブルーチン本体を変更する必要はありません。C では、次のように値渡しから参照渡しに変更できます: 型 T の代わりに T* としてパラメーターを宣言し、仮パラメーター "x" をすべて "(*x)" に置換して、各呼び出しで対応する引数 V をそのアドレスである &V に置換します。

警告: 参照渡しの引数は、呼び出されたルーチンが参照パラメーターを変更すると、変更されます。値渡しから参照渡しに変更する前に、仮パラメーターへの代入がないことを確認してください。

ID

問題箇所

説明

1

定義

関数が定義された場所

          
typedef struct {
    int x[10];
} T;

int add_up(T p) { // Better is int add_up(T &p)
    int i, total = 0;
    for (i = 0; i < 10; i++) {
        total += p.x[i];
    }
    return total;
}
        

© 2010 Intel Corporation. 無断での引用、転載を禁じます。