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

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

C++ 速度比較(2) 参照渡し vs 値渡し vectorにおける比較

Sponsored Links

皆さんこんにちわ。
お元気ですか。あの、雪きつすぎて外に出る気がおきません。
今日中に書こうと思ったら思ったよりも時間がかかって翌日になっていたとさ。

さて、本日はC++の速度比較
値渡しvs参照渡し。
vectorは値渡しと参照渡しどちらもできるのですが、なんか値渡しをすると速度が遅くなるとかなんとか。

さて実験。
実験環境は相変わらずです。

実験

実験内容

N=1000000回Functionを実行した。
その上でsizeを10000,100000の2つ比較する。

実験環境

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

結果

実験内容 サイズ 速度
値渡し 10000 90.82
値渡し 100000 808.82
参照渡し 10000 0.002978
参照渡し 100000 0.004653

感想

値渡しが信じられないぐらい遅い…。こんなに遅かったのか。
サイズにも関わってくるのね。うかつに値渡しはできないね…これだと。

ソースコード

#include <iostream>
#include <vector>

using namespace std;

int N = 1000000;

void argument(vector<int> array){
	int a = 10;
}
void pointer_argument(vector<int> &array){
	int b = 10;
}

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

	start = clock();
	for(int i = 0; i < N; i++){
		pointer_argument(array);
	}
	end = clock();
	cout << (double)(end-start)/CLOCKS_PER_SEC << endl;
}