printf 速い!

MSVC7.1 依存な話ですが、printf 速いですね。ロケールをはずした自前ストリームを作ったんですが、勝てません。まあ、小数点の文字列化には、_snprintf を使っているんで、まだまだ高速化可能なんですが、それにしても、フォーマットの構文解析時間が速い速い!

やり方は、printf ではなく、sprintf, iostream ではなく ostrstreamを使い、メモリに対する書き込みを測定しました。printf, cout 等では、デバイスに依存して速度が変わることを恐れたためです。

一応、比較結果です。3回分乗っけます。適当な文字列表示を 10000 回まわして、boost::timer で時間取得です。単位は、msです。printf が sprintf, cout が ostringstream, nonLocale が僕が作ったいんちきストリームです。

[ result ]
printf : 0.063
cout : 0.156
nonLocale : 0.047

[ result ]
printf : 0.046
cout : 0.157
nonLocale : 0.062

[ result ]
printf : 0.047
cout : 0.172
nonLocale : 0.047

ロケールがなくなると、3倍の速度が出るというのは分かったのですが、それにしても...printf 速い。

この測定に使ったプロジェクトは、sf.jp の CVS の GSLib/SandBox/stream にあります。

http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/gslib/GSLib/SandBox/stream/

# うお、sf.jp 便利だ。