C での標準入力からの行の読み取りが Python よりも遅い理由
予想に反して、標準入力から入力行を読み取る C コードは、 Python の対応物よりもパフォーマンスが大幅に遅くなります。この不一致は、C のデフォルト設定に起因します。
デフォルトの入力ストリーム構成
デフォルトでは、C 入力ストリーム (cin) は標準入出力 (stdio) と同期されます。 )。この同期は、cin が入力バッファリングを回避しようとして、一度に 1 文字ずつ読み取ることを意味します。
バッファリングが重要な理由
通常、入力ストリームは入力をより大きなサイズでバッファリングします。チャンクを分割し、データの取得に必要なシステム コールの数を削減します。ただし、FILE* ベースの stdio と iostream の個別の実装とバッファを一緒に使用すると、問題が発生する可能性があります。
潜在的な競合を防ぐために、ストリームはデフォルトで stdio と同期されます。 Cin は文字を 1 つずつ読み取り、特に数百万行を処理する場合に大幅なオーバーヘッドをもたらします。
解決策
パフォーマンスを向上させるには、sync_with_stdio(false) を使用してストリーム同期を無効にします。 main 関数の先頭のメソッド:
std::ios_base::sync_with_stdio(false);
この変更により、 C ストリームは独立してバッファリングできるため、入力処理が高速になります。
代替アプローチ: fgets
入力速度を向上させるもう 1 つの方法は、getline の代わりに fgets 関数を使用することです。
char buffer[1024]; while (fgets(buffer, sizeof(buffer), stdin)) { // Process the line }
以上がC の標準入力の読み取りが Python よりも遅いのはなぜですか?どうすれば改善できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。