C++相談室 part45
■ このスレッドは過去ログ倉庫に格納されています
0161デフォルトの名無しさん
2005/12/02(金) 12:00:08efficient c++に書いてあるけれど、すべてをinline展開するとコードサイズが増えすぎるので注意
コードサイズが増えると、キャッシュミスが多発して効率が下がることも。
使用コンパイラが、組込型変数の場合だけRVOする場合
=のついてない算術演算子(operator+()とか)はexpression templateが必要かも
ただし、expression templateは、「演算子の種類とlhs, rhsへのポインタ」などをメンバに持つ
一時オブジェクトを生成するコストがかかる。
線形代数ライブラリみたいに巨大なオブジェクトの一時オブジェクト生成を阻止したいときならいざしらず
class hoge_t {
int x, y;
};
みたいに小さなクラスのときは、逆効果だと思う。
どうしてもスピードがほしい部分なら、
hoge0 = hoge1; hoge0 *= hoge2; hoge0 *= 0.5;と展開するのがいいんじゃないかな。
コンパイラによっては:
int i = 10;
return i;
はRVOせず
return int(10);
はRVOするようなパターンもあるらしい。operator*()の定義を、最適化されやすいよう変えてみては。
■ このスレッドは過去ログ倉庫に格納されています