C の標準入力の読み取りが Python よりも遅いのはなぜですか?どうすれば改善できますか?

DDD
リリース: 2024-11-23 07:23:18
オリジナル
846 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

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