17

関数を使用して C で大きなファイルを読み取る必要がありますread。パフォーマンスの観点から、保持するバッファサイズに違いがあるかどうか疑問に思っていました. ファイルサイズは数十GBに達する場合があります。

4

2 に答える 2

11

短縮版。
場合によります。x86 では、4096 バイトのバッファー サイズが適切な開始点です (1ページ サイズAdvanced Formatブロック サイズ)。

ロングバージョン。
UNIX では、カーネル、libc、ファイルシステム、ハードウェアなどに依存します。バージョンやコンパイル オプションだけでなく、実行時の調整変数 (先読みセットアップなど) にも依存します。

DIY。
試して!特定のシステムに最適な読み書きバッファ サイズを決定する簡単な方法については、UNIX 環境での高度なプログラミングの第 3.9 章「I/O 効率」を参照してください。

于 2012-11-17T18:44:19.310 に答える
0

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

ヒント: libc のfopen(3)fread(3)fwrite(3)などの関数は、既に適切なバッファリングを行っています。

もう 1 つのヒント: ファイル全体をストリーミングする必要はないが、その一部にランダムにアクセスする必要がある場合は、それを試すことができますmmap()

于 2012-11-17T18:17:35.117 に答える