C++ iostreamsは、C++ストリームをstd::ios_base::sync_with_stdio()
経由でCストリームと同期させる必要があるかどうかを制御します。ストリーム同期をオフにすると、標準ライブラリの実装で、C++ストリームとCストリームに独立した非同期バッファを使用してパフォーマンスを向上させることができます。C++ストリームとCストリームを独立してバッファできるようにするメリットはありますか?
CおよびC++ストリーム用に別々の独立したioバッファセットを使用するためにドアを開いたままにしておくことが重要だと考えられたのはなぜですか?私はこれがどのようにIOバッファの1つのセットと比較してパフォーマンスを潜在的に改善するのか見ていない。標準ライブラリにプログラム・レベルで1組のIOバッファを許可すると、基礎となるOSIO機能に対する通常は高価な呼び出しの数を減らすことができますが、2組のioバッファの利点は何ですか?
CストリームとC++ストリームのバッファが別々になってパフォーマンスに役立つという技術的な理由があるのでしょうか、それとも単なる歴史的なアーティファクトなのでしょうか?
C++実装者が既存のC標準ライブラリ実装を構築してC++標準ライブラリを実装できるようにするために、何らかの形で委員会と関係がありますか?
「標準がそう言っている」以上のものを探しています。
理論的根拠を説明するためにOS特性が必要な場合は、実際のOSが提供する機能を例として使用したり、仮想的ではあるが合理的なOSを説明することはできます。
編集:は明確にするために、質問はなぜ同期ストリームは、パフォーマンスに悪影響を与えることができていません。問題は、なぜC++標準が、2組のioバッファがあり、その可能性を開いたままにしておくのが実装者にとって有益であるという前提で設計された理由です。 std::ios_base::sync_with_stdio()
はこの仮定の結果であるに過ぎません。
これは正解のように聞こえますが、不可能なことや例を挙げると具体的になりますか? – Praxeolitic
@Praxeolitic:単純な例として、 ''を書く人は 'ungetc()'のストリームアナログを提供するかもしれません。入力はパイプまたはソケットです。''実装でそのような機能が提供されていない場合、ストリームコードはプッシュバックされた文字を追跡し、次に入力がストリームから取得されたときに表示させることができますが、コードが基礎となるファイルから 'fread'しようとすると表示されます。 –
supercat
標準からずっとずれている標準(ヘッダー "iostreams.h"、非標準の拡張であるiostreams、no ungetc())に対応することを意図した標準のようです。委員会が準準拠の実装を気にしているという証拠を指摘できますか?さらに、iostreamとstdioの実装が何らかの形で基本的に互換性がないと仮定した場合、これによっても同期は不可能になりますか? – Praxeolitic