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
どうも他のパターンは全部memcpyかmemmoveにおきかえられているための差のようです。
どのパターンでもほどほどに速いコンストラクタ万歳!ってとこでしょうか。
しかしgcc3.4に比べてgcc4.0とかgcc4.1が返って悪くなっていて嫌だなぁと思うわけです。しくしく。