-3

printf の方が優れている理由は...

  • 出力をバッファリングします
  • 文字列のフォーマットを行います

書き込みの方が優れている理由は...

  • 文字列の長さを計算する必要はありません
  • バッファリングしないため、デバッグがはるかに簡単です
  • printf は write の単なるラッパーです
  • 出力バッファにメモリを使用しません
  • 上記の理由により、文字列の長さ (多くの場合既知であり、再計算する必要がない) を渡し、バッファーを管理することにより、printf よりも write の方がはるかに最適な (より少ないメモリ フットプリントでより高速な) プログラムを作成することができます。内部的に (これは実際に必要なメモリのみを使用し、プログラマが影響を与えることができない量ではありません)。
  • フォーマットされていない文字列のみで呼び出された場合でも、printf() にはおそらくオーバーヘッドがあります。

結論として、printf() は人間が消費するあらゆる種類のデバッグ出力 (文字列の書式設定のため) に優先され、write() は通常の操作でデータを出力するために優先されると主張します。

さらに考えはありますか?

4

1 に答える 1

1

実際にはオペレーティングシステムに依存します。Linux および多くの Unix では、write(2)は低レベルのsyscallであるため、何らかの出力を行うための基本的で低レベルの操作です。(そしてprintf上で構築されたライブラリ関数ですwrite)。

ただし、操作にはオーバーヘッドがあり、パフォーマンス上の理由から、標準関数 ( など) が非常にうまく機能write(2)する出力をバッファリングする必要があります。簡単に言えば、少量のデータで呼び出すことは避けてください (適切なバッファ サイズは通常、数キロバイトです)。ライブラリ関数がバッファをフラッシュしています (したがって、 を呼び出す可能性があります) 。<stdio.h>printfwrite(2)fflushwrite

于 2012-12-25T08:14:02.043 に答える