2002-11-16

STLportのbasic_string::reserve()

STLportのbasic_string::reserve()ってもともとのバッファのサイズが十分あってもわざわざ新しくメモリを確保してコピーしてしまうんですね。vector::reserve()はcapacity()よりも引数が大きいときしかやらないのに。なので、reserve()を呼ぶ前にcapacity()を呼び出してサイズが充分でない場合だけreserve()を呼び出すようにしないと無駄なメモリの確保とコピーが発生してしまいます。QMAILでサイズが大きなメールを受信するとだんだんパフォーマンスが悪くなるのはこのせいでした。