C で IOStream のパフォーマンスを最適化する方法
C ユーザーは、後者のインターフェイスにもかかわらず、C IOStream よりも printf/scanf ファミリの関数を好むことがよくあります。利点。この設定の主な理由として、パフォーマンスの懸念がよく挙げられます。
バッファリング
基礎となる streambuf のバッファ サイズを拡大すると、HDD ヒットとシステムのヒットが減少し、パフォーマンスが大幅に向上します。呼び出します。これは次のように行われます。
char Buffer[N]; std::ifstream file("file.txt"); file.rdbuf()->pubsetbuf(Buffer, N);
ロケール処理
ロケールでは、文字変換、フィルタリング、および動的ディスパッチによりパフォーマンスのオーバーヘッドが発生する可能性があります。ロケールをデフォルトの C ロケールに設定すると、これらの操作が無効になり、パフォーマンスが向上します。
std::locale::global(std::locale("C"));
同期
C stdio との同期 (std::ios_base: :sync_with_stdio(false)) は観察可能なパフォーマンスを提供しません
測定
さまざまなコンパイラとプラットフォームを使用したベンチマークにより、さまざまな結果が明らかになりました:
これらの結果は、IOStream のパフォーマンスの向上が特定の実装の実装に応じて異なることを示しています。したがって、プラットフォーム間で IOStream を最適化するための普遍的なソリューションはありません。
以上がC IOStream のパフォーマンスは実際には printf/scanf よりも遅いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。