1

これらの2つのプロンプト行のどちらがパフォーマンスの面で優れているのか疑問に思いました。

  • ./function input > output.txt
  • ./function input output.txt

さて、いくつかのコンテキストでは、私の関数fprintfは出力の印刷にのみ使用します。例:

fprintf(output," whatever");

では、上記の選択肢のどれがパフォーマンス面でより良い動作をするでしょうか?stdoutをリダイレクトしますか、それともファイルに直接印刷しますか?

4

1 に答える 1

0

2つのアプローチの違いは、どちらのプロセスが書き込み用にファイルを開き、ファイルを閉じるかだけです。したがって、プログラムの実行中にパフォーマンスの違いはありません。4つ(出力をstdoutに書き込む場合)ではなく、5つの(stdin、stdout、stderr、 "input"、および "output.txt")ファイル記述子が開いているという事実に違いはありません。

もちろん、プログラムがstdoutに書き込む場合でもファイルに書き込む場合でも、プログラムがまったく同じように動作するためには、ファイルへの書き込みもラインバッファリングする必要があります(stdoutへの書き込み時のデフォルトの場合と同様)。

このようsetvbuf()に取得したファイル構造体を呼び出さない場合(のマンページから取得)、プログラムはブロックバッファリングを使用し、ほとんどの場合、これはstdoutへのリダイレクトよりも高速になります。fopen()setvbuf(stream, (char *) NULL, _IOLBF, 0);setvbuf()

したがって、プログラムがその出力にブロックバッファリングを使用することを許可されている場合、は./function input output.txtより高速になります。(ただし、質問に関するコメントは有効です。実際のパフォーマンスを測定してください!)

于 2012-12-15T19:34:21.773 に答える