« 今日のFFO | Main | 1Mnps(今日のFFO) »

August 29, 2004

vector::clear()

vector::clearは各要素のデストラクタだけ呼んでメモリ領域は縮小しない、と一般には考えられているし、Effective STLなどの書籍のいたるところにその記述が見られる。vectorが保持するメモリ領域を縮小したい場合の措置として、swapを用いた技法などトリッキーな技まで紹介される始末だ。

ところが、今朝方プロファイルをとってみて、vector::clearしか呼んでいないはずの場所がやたら時間を食っていることに気づいた。そこでVisual C++ 7.1のvectorのソースを覗いてみると……なんと、clear()でメモリを完全に解放している。unnoの提唱した「ローカルにvectorを置かないでメンバ変数にしてclearだけしてごまかす」という手法でほとんど速くならなかったのはこのせいか。unnoはSTLportを使っているので、標準的なvectorの実装を使っているのではないかと推定。

DinkumwareのSTLは実装の点でSTLの常識と大分食い違っているような気がする。もちろんそれには実装者の思想があるのだろうけど。

さて、どうしよう。俺もSTLportを使うか、というところだが、配布の点から考えるとちょっと面倒だ。また、「自前超高速固定長vector」を書くかな。boost::arrayも思い浮かんだが、こいつは本当の固定長で、「現在の要素数」というカウンタを変更できないので却下。

しかしながらiteratorとか全部用意するのは面倒なので、boost::arrayをラップするクラスを作ればいいのかな?

|

« 今日のFFO | Main | 1Mnps(今日のFFO) »

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference vector::clear():

« 今日のFFO | Main | 1Mnps(今日のFFO) »