3

ファイルI/Oを減らすために、CまたはC ++でファイルを読み書きするためにカスタムバッファーを使用する必要はありますか?

たとえば、ファイルエントリをエントリごとに読み取る必要がある場合(一度に1文字、または一度に1つの構造体)、バッファを使用してfread()の呼び出し回数を減らすことをお勧めしますか?I / O(読み取りと書き込み)に違いはありますか?答えは、運用システムまたはコードにない他のものに依存しますか?

これが推奨されていることを知りましたが、今日誰かがについて教えてくれましsetvbuf()stdio.h。すべてがすでに存在しているようで、プログラムにこの複雑さを追加する必要はありません。

stackoverflowを見ると、/との間に有意差がないと主張する投票のない回答が見つかりました。それは本当に本当ですか?fgetcsetvbuf()fgets

4

3 に答える 3

3

このfread()関数は、下位レベルを頻繁に呼び出すことを避けるために、既にバッファリングを実装していますread()。いくつかのベンチマークを実行して、ファイル I/O に多くの時間がかかっていることが判明しない限り、心配する必要はありません。

于 2012-04-04T07:08:50.437 に答える
1

すべての関数<stdio.h>は、独自のバッファリングを行います。例外もありますが、一般的には、バッファ サイズなどに関して、それらが実行されているシステムに合わせて最適化されることを期待しています。setvbuf()その場合、いくつかの非常に特殊なケースを除いて、私は using が悲観的であると予想します。

于 2012-04-04T07:26:00.080 に答える
0

std::istreamオブジェクトはstd::streambuf、実際に読み取り操作を実行するために関連付けられたオブジェクトを必要とします。

istream( ifstream) の file の実装には、内部的にfstreambufそれを行う があります。

于 2012-04-04T07:26:18.307 に答える