C プログラムでの scanf() の使用は cin より速いですか?
入力の読み取り時に scanf() を使用した方が cin より速いという主張C にはある程度の真実があります。説明は次のとおりです:
速度ベンチマーク
この主張を検証するために、標準入力から数値のリストを読み取り、それらの排他的論理和を計算する簡単なテスト プログラムが作成されました ( XOR) 演算。プログラムの 2 つのバージョンがテストされました。1 つは iostream (cin と cout) を使用し、もう 1 つは stdio (scanf と printf) を使用しました。
大量の入力 (33,280,276 個の乱数) を使用してテストした場合、scanf バージョンiostream バージョンを大幅に上回り、24.3 秒と比較して 6.4 秒でタスクを完了しました。
速度の違いの理由
速度の違いは、iostream と C の I/O 関数の同期によって発生します。 iostream を使用した入出力操作は C I/O 関数 (getchar()、putchar() など) と同期され、追加のオーバーヘッドが発生します。
ios::sync_with_stdio(false)
この同期の問題に対処するには、 std::ios::sync_with_stdio(false) を使用すると、iostream と stdio の間の同期を無効にすることができます。これにより、iostream は同期のオーバーヘッドなしでより効率的に動作できるようになります。
同期を無効にした後、iostream バージョンのパフォーマンスが大幅に向上し、scanf バージョンよりも速い 5.5 秒でタスクを完了しました。
結論
ベンチマーク結果に基づいて、確かに、C プログラムで大量の入力を読み取る場合、scanf() は cin を使用するよりも高速です。ただし、std::ios::sync_with_stdio(false) の最適化により、iostream は scanf() よりもパフォーマンスが優れる可能性があるため、入出力操作には推奨される選択肢であると考えるべきです。
以上が`scanf()` は C の `cin` よりも本当に高速ですか? `cin` のパフォーマンスを最適化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。