ホームページ > バックエンド開発 > C++ > C ストリームと C の printf を混合すると出力速度が向上しますか?

C ストリームと C の printf を混合すると出力速度が向上しますか?

Linda Hamilton
リリース: 2024-11-06 10:40:03
オリジナル
837 人が閲覧しました

Can Mixing C   Streams with C's printf Improve Output Speed?

C ストリームと C の printf を混合して出力を高速化

C ストリーム (cout) と C の printf 関数を混合すると、特に大規模なデータ セットを処理する場合に、実際に出力速度が向上します。メソッドを切り替える前にバッファをフラッシュするための予防措置を講じれば、このアプローチを採用するのが一般的に安全です。

提案されたコード スニペットの詳細な分析は次のとおりです。

cout << "Hello" << endl;
cout.flush();

for (int i=0; i<1000000; ++i) {
    printf("World!\n");
}
fflush(stdout);

cout << "last line" << endl;
cout << flush;
ログイン後にコピー

長所:

  • 切り替え前にフラッシュ: バッファをフラッシュすると、printf に移行する前に C ストリームからのすべてのデータが出力されます。
  • 最適化特定のシナリオ: 特に、広範なループと出力操作に printf を使用すると、パフォーマンスが向上する可能性があります。

短所:

  • 実装の依存関係: ストリームと printf の混合は実装に依存します。正確なパフォーマンスの向上は、システムやコンパイラによって異なる場合があります。

ベンチマークと最適化:

より包括的なビューを提供するには、次のパフォーマンス ベンチマークを検討してください。

// Various output techniques
void use_printf() { ... }
void use_puts() { ... }
void use_cout() { ... }
void use_cout_unsync() { ... }
void use_stringstream() { ... }
void use_endl() { ... }
void use_fill_n() { ... }
void use_write() { ... }

int main() { 
    show_time(use_printf, "Time using printf");
    show_time(use_puts, "Time using puts");
    show_time(use_cout, "Time using cout (synced)");
    show_time(use_cout_unsync, "Time using cout (un-synced)");
    show_time(use_stringstream, "Time using stringstream");
    show_time(use_endl, "Time using endl");
    show_time(use_fill_n, "Time using fill_n");
    show_time(use_write, "Time using write");
    return 0;
}
ログイン後にコピー

結果:

  • printf と put は、NUL デバイスへの書き込み時に速度の大幅な利点を提供します。
  • cout のパフォーマンスは次の場合に向上します。実際のファイルに書き込みます。
  • endl を回避すると、パフォーマンスが大幅に向上します。
  • cout.write は、出力時間が最速になります。

結論:

  • 単純な印刷には cout などのストリームを使用し、大規模な出力操作には printf を予約します。
  • メソッドを切り替える前にバッファをフラッシュします。
  • endl を優先的に回避することを検討してください。 "n" による明示的な改行。

以上がC ストリームと C の printf を混合すると出力速度が向上しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート