ホームページ > バックエンド開発 > C++ > C の stdin 入力が Python よりも大幅に遅いのはなぜですか?どうすれば改善できるでしょうか?

C の stdin 入力が Python よりも大幅に遅いのはなぜですか?どうすれば改善できるでしょうか?

Susan Sarandon
リリース: 2024-12-18 11:57:16
オリジナル
869 人が閲覧しました

Why is C  's stdin Input Significantly Slower Than Python's, and How Can It Be Improved?

C では標準入力 (stdin) からの行の読み取りが Python よりもはるかに遅いのはなぜですか?

標準入力 (stdin) からの行の読み取りは、Python では大幅に遅くなることがあります。 C 入力のデフォルト設定が異なるため、C と Python を比較stream.

デフォルト バッファリング

デフォルトでは、C 入力ストリーム (cin) は標準入出力 (stdio) ストリームと同期されます。この同期により、cin は入力バッファリングを回避し、一度に 1 文字ずつ読み取ることになります。

Python バッファリング

対照的に、stdin ストリームPython ではデフォルトでバッファリングされるため、一度に大きな入力チャンクを読み取ることができます。これにより、データの読み取りに必要なシステム コールの数が減り、パフォーマンスが向上します。

C コードの修正

C で同様のパフォーマンスを実現するには、メイン関数の先頭に次の行を追加することで stdio と同期します:

std::ios_base::sync_with_stdio(false);
ログイン後にコピー

これにより、 cin を使用して入力をバッファリングし、読み取り速度を大幅に向上させます。

fgets と getline の比較

さらに、getline() の代わりに fgets を使用することを検討することもできます。ファイルまたは標準入力からテキスト行を読み取る C 関数。 fgets には、動的なメモリ割り当てが必要ないという利点があり、パフォーマンスがさらに向上します。

パフォーマンスの比較

以下は、さまざまなアプローチの 1 秒あたりの行数 (LPS) を比較した表です。 100M 行ファイルを使用:

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 (not fair comparison) 54,644,808

ご覧のとおり、無効にします同期または fgets を使用すると、C のパフォーマンスが大幅に向上します。

以上がC の stdin 入力が Python よりも大幅に遅いのはなぜですか?どうすれば改善できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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