読者です 読者をやめる 読者になる 読者になる

Pebble's Diary

プログラマーの作業メモ

C++ 小さいサイズの構造体を引数に渡す時は値渡し、参照渡しどちらが高速か?

調べてみました。 こんなサンプルで時間を計測しました。

struct Hoge {
    float a;
    float b;
};

Hoge hoge1 = { 25, 26 };
Hoge hoge2;

// 値渡し
void func1(Hoge hoge){
    hoge2 = hoge;
}

// 参照渡し
void func2(const Hoge& hoge){
    hoge2 = hoge;
}

1) float2つ
min 35 us max 123 us mean 45 us
min 43 us max 199 us mean 73 us
min 60 us max 3293 us mean 240 us
min 30 us max 119 us mean 45 us

min 35 us max 123 us mean 45 us
min 27 us max 176 us mean 60 us
min 37 us max 165 us mean 67 us
min 50 us max 209 us mean 69 us

2) int64_t2つ
値渡し
min 31 us max 170 us mean 74 us
min 34 us max 133 us mean 49 us
min 35 us max 172 us mean 52 us
min 31 us max 120 us mean 44 us

参照渡し
min 115 us max 215 us mean 136 us
min 119 us max 223 us mean 130 us
min 115 us max 289 us mean 139 us
min 111 us max 204 us mean 124 us

結果は int64_t 2つの場合、値渡しの方が2,3倍高速、
float 2つの場合、差が出ないと感じです。

この程度なら、値渡しでいいってことですかね。