インライン関数

インライン関数というのは、関数呼び出しのオーバーヘッドタイムを減少させることを目的に使うということですが、本当に効果があるのでしょうか? 大した効果はないという話も聞くので、実際に、Visual C++ 2005で試してみました。使用したのは、Efficient C++に載っていた下記のコードです。

class Rational
{
public:
Rational (int a = 0, int b = 1) : n(a), d(b) {}
inline void* operator new(size_t size);
// void* operator new(size_t size);
inline void operator delete(void* doomed, size_t size);
// void operator delete(void* doomed, size_t size);
static void newMemPool() { expandTheFreeList(); }
static void deleteMemPool();
private:
static NextOnFreeList *freeList;	// Rationalオブジェクトの空きリスト
static void expandTheFreeList();
enum { EXPANSION_SIZE = 32 };
int	n;	// 分子
int	d;	// 分母
};

それで、下記のfor文で、Rationalオブジェクトのnewとdeleteを合わせて100万回実行しましたが、結果は、inlineの場合が110ミリ秒で、そうでない場合が125ミリ秒でした 。多少は、効果があるのかもしれません。

for (int j = 0; j < 500 ; j++) {
int i;
for (i = 0; i < 1000 ; i++) {
rationalArray[i] = new Rational(i);
}
for (i = 0; i < 1000 ; i++) {
delete rationalArray[i];
}
}