inline void add(const DataStruct& rhs) {
using namespace boost::assign;
vec.reserve(vec.size() + 3);
vec += rhs.a, rhs.b, rhs.c;
}
上記の関数は約17000回実行され、vector :: reservedを呼び出すと、 約2桁悪化しました(私が見る限り、いくつかの変換が含まれていました) 。
私はいつも、reserveは小さな値でもpush_backを高速化できるという印象を受けていましたが、これは真実ではないようで、このようにすべきではない明確な理由を見つけることができません。リザーブは関数のインライン化を防ぎますか?size()の呼び出しは高すぎますか?これはプラットフォームに依存しますか?クリーンな環境でこれを確認するために、いくつかの小さなベンチマークをコーディングしてみます。
コンパイラ:gcc (GCC) 4.4.2
-g-O2を使用