インライン関数というのは、関数呼び出しのオーバーヘッドタイムを減少させることを目的に使うということですが、本当に効果があるのでしょうか? 大した効果はないという話も聞くので、実際に、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]; } }