雨谷の日和

過去19年で2,600を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

Cでのバッファリング

Javaでバッファリングをした場合の出力と比較するために、Cでバッファリングした出力の場合も見てみよう。
※以後、比較にはfputsを用いる。また、念のためにメッセージもconst char[]にした。

#include 
int 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のバッファリングはあまり効果がないということなのだろうか。
これについては次回、少し理由を考えてみたい。