2012-11-17 20 views
11

私は、read機能を使用してCで大きなファイルを読み込む必要があります。私は、パフォーマンス面でバッファサイズを変えているかどうかは分かりません。ファイルサイズは数十GBに達することがあります。Cでファイルを読み込むための最適なバッファサイズ

+0

もちろん、バッファサイズは重要ですが、「最適」は異なります。 –

+0

大きいほど良い、理由の中で。また、2の累乗(または少なくとも512の倍数)のバッファサイズを使用することには、いくつかの小さな利点があります。 –

+0

@HotLicksはなぜ '512'を説明できますか –

答えて

0

最初は:確かに、ディスクの論理/物理セクタサイズの倍数で、hdparmを使用して確認できます。これは同じです

ヒント:libcのfopen(3)fread(3)fwrite(3)などの機能はすでにあなたのために良いバッファリングを行います。

別のヒント:ファイル全体をストリームする必要はなく、ランダムに部分にアクセスする必要がある場合は、mmap()を試してみてください。

+0

OSは、他に指示されなければ、 'open | read | write'(ページキャッシュ+ readahead)でもバッファリングを十分に行います(' O_DIRECT'/'O_SYNC') – SaveTheRbtz

8

ショートバージョン。
です。 x86バッファサイズは4096バイトです(1つはpage size、もう1つはAdvanced Formatブロックサイズです)。

より長いバージョンです。
UNIXでは、カーネル、libc、ファイルシステム、ハードウェアなどによって異なります。バージョンやコンパイルオプションだけでなく、実行時の調整可能パラメータ(例:先読み設定)にも依存します。 DI30。
試してみてください!特定のシステムの最適な読み書きバッファサイズを簡単に判断する方法については、Advanced Programing in UNIX Environment第3.9章「I/O効率」を参照してください。

関連する問題