ldが遅い件

ldが遅すぎなのが気になって、ちょっとテストしてみました。
テストに使ったのは、チュートリアルのZIP作成サンプルです。

% time g++ -c -I/home/hamigaki/src/hamigaki -I/usr/include/boost-1_33_1 mk_zip.cpp

real    0m16.954s
user    0m15.685s
sys     0m1.186s

% time g++ -o mk_zip mk_zip.o -lboost_filesystem-gcc-mt-s -lboost_iostreams-gcc-mt-s -lz -lbz2

real    0m1.344s
user    0m0.637s
sys     0m0.622s

あれ?
全然速いですね。
もしや、デバッグシンボルのせいでしょうか?
デバッグシンボルを有効にしてみます。

% time g++ -c -g -I/home/hamigaki/src/hamigaki -I/usr/include/boost-1_33_1 mk_zip.cpp

real    0m52.906s
user    0m27.935s
sys     0m8.295s

% time g++ -o mk_zip mk_zip.o -lboost_filesystem-gcc-mt-s -lboost_iostreams-gcc-mt-s -lz -lbz2

real    0m24.375s
user    0m14.589s
sys     0m5.201s

予想通り、かなり遅くなりました。
この例だと、リンクよりもコンパイルに時間がかかっていますが、リンクにかかる時間はかなり幅があって、最悪の場合は1分20秒くらいかかってました。
ウイルスチェッカーやインデックスサービスなどの外的要因に左右されているのかも知れません。


さらに、もしかしてと思って、最適化を有効にして試してみたところ、

% time g++ -O2 -c -I/home/hamigaki/src/hamigaki -I/usr/include/boost-1_33_1 mk_zip.cpp

real    0m28.531s
user    0m18.247s
sys     0m1.216s

% time g++ -o mk_zip mk_zip.o -lboost_filesystem-gcc-mt-s -lboost_iostreams-gcc-mt-s -lz -lbz2

real    0m1.609s
user    0m0.482s
sys     0m0.497s

なんと、コンパイル・リンク共にデバッグビルドより速いという結果になりました。


shinichiro.hさん経由でココを見て、-pg付きのldもビルドしてたんですが、もういいです。
Cygwinの退行テストはリリースビルドでやろうと思います!


(21:53 追記)
リリースビルドだと変な警告が出たので、
BUILD="<debug-symbols>off"
デバッグシンボルだけオフにすることにしました。