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

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

C++ 速度比較(6) 宣言に関する内容、ループ内でのメンバ変数の使用

Sponsored Links

皆さんこんにちわ
お元気ですか。私は…どうなんでしょう?

さて、今回はC++速度検証第6回。
ループの中で変数を宣言して代入していく場合、そして、ループの外で変数を宣言し、変数を代入する方法。
また、メンバ変数をループで使った場合遅いというページを見たので検証をしてみた。

実験

実験内容

メンバ関数内で100000回実行し、外部で100000回それを実行した。

実験環境

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

結果

メンバ変数、宣言をループ内で使用 24.09
宣言をループ内で使用 23.75
どちらも外部で 23.55

感想

極々わずかだと思います。
これならコード見やすい方に合わせるのがベストかなと…。

ソースコード

#include <iostream>

using namespace std;
class Temp{
public:
	int tmp;
	Temp(int num){
		tmp = num;
	}
	void Boo();
	void Foo();
	void Bar();
};

void Temp::Boo(){
	for(int i = 0; i < tmp; i++){
		int temp_answer = i;
	}
}

void Temp::Foo(){
	int size = tmp;
	int temp_answer = 0;
	for(int i = 0; i < size; i++){
		temp_answer = i;
	}
}

void Temp::Bar(){
	int size = tmp;
	for(int i = 0; i < size; i++){
		int a = i;
	}
}
int main(int argc, char const *argv[]){
	Temp tmp(100000);
	void(Temp::*func[])() = {&Temp::Boo,&Temp::Foo,&Temp::Bar};
	for(int i = 0; i < 3; i++){

		clock_t start,end;
		start = clock();

		for(int j = 0; j < 100000; j++){
			(tmp.*func[i])();
		}

		end = clock();
		cout << (double)(end - start) / CLOCKS_PER_SEC << endl;
	}
	return 0;
}