Javaでバッファリングをした場合の出力と比較するために、Cでバッファリングした出力の場合も見てみよう。
※以後、比較にはfputsを用いる。また、念のためにメッセージもconst char[]にした。
#includeint main(void) { int i; FILE *out; char buffer[8192]; const char buf[] = "Hello world!\n"; out = fopen("c_log.txt", "w"); setbuf(out, buffer); for(i = 0; i < 10000000; ++i)fputs(buf, out); fclose(out); return (0); }
setbuf関数で、バッファリングのための領域を設定することができる。
(ただし、私はあまりCには詳しくないので、間違っているかもしれない)
これを、デフォルトコンパイル、最適化無し、最適化レベル1、2、3の5つの場合について実行してみた。
20:24:30 20:24:35 20:24:40 20:24:45 20:24:50 20:24:55
いずれも、約5秒という結果となった。バッファリングしていない場合と、変化が無い。
これはCのバッファリングはあまり効果がないということなのだろうか。
これについては次回、少し理由を考えてみたい。