toge's diary

コンピュータ関連の趣味をつらつらと。

vectorの話し

実家から帰ってきたらきのこる先生が面白いことをされているので、追従。

id:halo_w2:20050505

きのこる先生の関心事はVCのSTLなのですが、私はgccでの対応度合いが見たかったので即席プログラム書いてみました。
このプログラム、残念ながらUNIXでしか動きません。

以下に結果を貼っておきます。(単位は全部秒です。)
gcc3.4.3 -O3 -march=athlon-xpの場合

baseline 0.129327
vector::reserve + vector::push_back 0.408046
vector::resize + vector::memcpy 0.151189
vectorイテレータ範囲コンストラクタ 0.126662
vector::resize + vector::iteratorによるstd::copy 0.160553
vector::resize + pointerによるstd::copy 0.160136

gcc4.0(snapshot) -O3 -march=athlon-xpの場合

baseline 0.127874
vector::reserve + vector::push_back 0.402784
vector::resize + vector::memcpy 0.222410
vectorイテレータ範囲コンストラクタ 0.274312
vector::resize + vector::iteratorによるstd::copy 0.243481
vector::resize + pointerによるstd::copy 0.230984

gcc4.1(snapshot) -O3 -march=athlon-xpの場合

baseline 0.135666
vector::reserve + vector::push_back 0.469440
vector::resize + vector::memcpy 0.185500
vectorイテレータ範囲コンストラクタ 0.172744
vector::resize + vector::iteratorによるstd::copy 0.193151
vector::resize + pointerによるstd::copy 0.194492

うーん、vector::reserve + vector::push_backが思いの他遅いですね。
どうも他のパターンは全部memcpyかmemmoveにおきかえられているための差のようです。
どのパターンでもほどほどに速いコンストラクタ万歳!ってとこでしょうか。

しかしgcc3.4に比べてgcc4.0とかgcc4.1が返って悪くなっていて嫌だなぁと思うわけです。しくしく。