のんびりしているエンジニアの日記

ソフトウェアなどのエンジニア的な何かを書きます。

C++ 速度比較(3) return で値を返すvs参照しているvectorに値を入れる。(参照返し?)

Sponsored Links

皆さんこんにちわ。
お元気ですか?冬になると電気代がマッハやばいです。

さて、今回はreturnについて
vector型ってreturnできますよね?でも、よく関数に参照引数を渡して、それに値を突っ込む形が多いです。今回は参照するのが速いのかどうかについて検証。

まぁ前回の値渡し参照渡しから考えるに、多分値渡しした方はえらいことになりそうな気がしなくもない…。

実験

実験内容

N=1000000回同じことをさせ、参照返し(=返り値なしでvectorに値を入れる)のと値返しするのとで比較。

実験環境

OS:X 10.9.1
CPU:2.8GHz IntelCore i7
メモリ:16GB 1600MHz DDR3

結果

実験内容 速度
値返し 109.303
参照返し 29.185

感想

値返しはさけた方がいい、いや本当に。
次は…何させよう。

ソースコード

#include <iostream>
#include <vector>

using namespace std;

int N = 1000000;

void argument(vector<int> &array1,vector<int> &array2){
	int size = array1.size();
	for(int i = 0; i < size; i++){
		array2[i] = i;
	}
}

vector<int> return_argument(vector<int> &array1,vector<int> &array2){
	int size = array1.size();
	for(int i = 0; i < size; i++){
		array2[i] = i;
	}
	return array2;
}

int main(void){
	int size = 10000;
	vector<int> array1(size);
	vector<int> array2(size);
	for(int i = 0; i < size; i++){
		array1[i] = i;
	}
	clock_t start,end;
	start = clock();
	for(int i = 0; i < N; i++){
		argument(array1,array2);
	}
	end = clock();
	cout << (double)(end-start)/CLOCKS_PER_SEC << endl;

	start = clock();
	for(int i = 0; i < N; i++){
		return_argument(array1,array2);
	}
	end = clock();
	cout << (double)(end-start)/CLOCKS_PER_SEC << endl;
}