関数呼び出しのオーバーヘッドと,情報の隠蔽
以下は,10億回繰り返して呼び出したときの結果 const 2.12 // ハードコードした数字へのアクセス const val 2.04 // const宣言した定数変数へのアクセス val 2.05 // 通常のローカル変数へのアクセス Hoge.val 2.14 // オブジェクトのメンバ変数へのダイレクトなアクセス Hoge::getVal() 6.73 // メンバ関数(アクセサ)経由のアクセス Hoge::IgetVal() 6.43 // インライン化したメンバ関数によるアクセス
→ -O3 を付けたら全て 0秒 になった!!! -funroll-loops だけでは 0.1秒 ぐらいしか変わらず。 -march=pentium4 だけでも差はなし。