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

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

C++ 速度比較(8) inline展開ってどの程度影響あるの?

Sponsored Links

皆さんこんにちは
お元気ですか。私は2日酔いです。

今日はinline展開について見て行きたいと思います。
何気にコンパイラによる最適化によってお世話になっていたりもするこの展開ですが何をしているのでしょうか。

そもそもinline展開とは

関数をその場で展開します。

int sum(int a,int b){
    return a + b;
}

int main(void){
   sum(1,2);
   return 0;
}

inline展開のイメージはこちらです。

int main(void){
    1 + 2;
    return  0;
}

要は関数を呼びに行く時間もったいないからその場で展開してしましょう。
折角なので速度を比較してみた。

実験

実験内容

inlineつけたものを1億回、つけてないものを1億回呼んだ

環境

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

結果

inline展開有
4.2e-05
inline展開なし
3.37014

うん、微々たるものですね。

ソースコード

#include <iostream>

#define N 1000000000

using namespace std;

inline void execSum(int *a){
	*a = *a + 1;
}

void execSum2(int *a){
	*a = *a + 1;
}

int main(void){
	int a = 0;
	int *sum = &a;

	for(int i = 0; i < N; i++){
		execSum(sum);
	}

	clock_t start = clock();
	cout << *sum << endl;

	cout << (double)(clock() - start) / CLOCKS_PER_SEC << endl;

	*sum = 0;
	start = clock();

	for(int i = 0; i < N; i++){
		execSum2(sum);
	}

	cout << *sum << endl;


	cout << (double)(clock() - start) / CLOCKS_PER_SEC << endl;
}