ホームページ >バックエンド開発 >C++ >C の「ifstream」は常に「fscanf」より遅いですか?

C の「ifstream」は常に「fscanf」より遅いですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-12 11:15:02602ブラウズ

Is C   `ifstream` Always Slower Than `fscanf`?

IOStream パフォーマンスの向上

C を学習したさまざまな C ユーザーは、インターフェイスがアクセスしやすく、C でコーディングしている間でも printf / scanf ファミリの関数を使い続けることを好みます。ローカリゼーション機能。ただし、C の ifstream と比較すると、パフォーマンスの問題が発生する可能性があります。特に、fscanf は一貫して ifstream よりもパフォーマンスが優れていることが観察されています。

IOStreams の最適化テクニック

IOStreams のパフォーマンスを向上するには、次のテクニックを検討してください。

pubsetbuf() によるバッファリング

バッファ サイズを増やすと、HDD ヒットとシステム コールが減少し、パフォーマンスが向上します。 pubsetbuf() を使用して streambuf 実装にアクセスし、バッファを設定します。

char Buffer[N];

std::ifstream file("file.txt");

file.rdbuf()->pubsetbuf(Buffer, N);

ロケール処理

ロケールは、文字変換や複雑なシステム コールによりパフォーマンスに影響を与える可能性があります。このオーバーヘッドを回避するには、マシン間の変換と均一性を最小限に抑えるように最適化されたデフォルトの C ロケールを選択してください。

sync_with_stdio() との同期

このパラメータは、テストでは顕著なパフォーマンスの向上を示しませんでした。 .

ベンチマークと結果

簡単なテスト プログラムを使用したベンチマークにより明らかになります。異なるプラットフォームやコンパイラでは結果が異なります。この結果は、IOStreams のパフォーマンスが実装に依存していることを示唆しています。

さまざまなベンチマークからの結果は次のとおりです:

g 4.7.2-2ubuntu1, -O3, Ubuntu 11.10 x86_64

  • C 25% 高速化

g 4.4.5、-O3、Ubuntu Linux 10.10 x86_64

  • C 17% 高速化

g i686-apple-darwin10-g -4.2.1 (GCC) 4.2.1、mac mini、4GB RAM

  • C 111% 遅い

clang 3.8.0-2ubuntu4、Kubuntu 16.04 Linux 4.8-rc3

  • C 66% 高速

これらの結果は、IOStreams パフォーマンスの最適化における実装品質の重要性を強調しています。

以上がC の「ifstream」は常に「fscanf」より遅いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。