C では Python よりも標準入力からの行の読み取りがはるかに遅い理由
Python と C で入力の読み取り速度を比較すると、次のことが観察されました。 C コードの実行速度は 1 桁遅くなります。
cin の不足バッファリング
この矛盾は、デフォルトの動作の根本的な違いから生じます。 C の cin は、デフォルトで標準入出力 (stdio) と同期されるため、入力バッファリングが行われず、その結果、文字を 1 つずつ読み取ることになり、システム コールの点で高価なプロセスとなります。
解決策: 同期を無効にします
パフォーマンスを向上させるには、cin の同期をプログラムの先頭に次の行を追加することで stdio を無効にできます:
std::ios_base::sync_with_stdio(false);
これにより、C ストリームが I/O を個別にバッファリングできるようになり、読み取り速度が大幅に向上します。
違いを説明するためのストロー投票:
Implementation | Lines per second |
---|---|
Python (default) | 3,571,428 |
cin (default/naive) | 819,672 |
cin (no sync) | 12,500,000 |
fgets | 14,285,714 |
wc (unfair comparison) | 54,644,808 |
この表は、次の場合の読み取り速度の大きな違いを示しています。 cin の同期は無効になっています。
以上がC の `cin` が Python の入力よりも大幅に遅いのはなぜですか?どうすれば改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。