2012-05-10 6 views
1

私はC言語でプログラミングしています。時には、ストリームI/OまたはシステムコールI/Oのいずれかを意味するfreadまたはreadシステムコールを通常使用するファイルから大きなデータを読み込む必要があります。Cで効率の良い方法で大きなバッファを読む

このような大きなデータを読んでいる場合は、ブロックサイズを計算してそれに応じて読むことが、効率的であるかどうかを問わずに役立つでしょうか?

私は、システムコールを読むことで速度が遅くなり、ネットワークソケットを処理する必要がある場合など、他の条件があることがわかります。ストリームベースのI/Oを使用する代わりに最適化された結果が得られます。賢明なように、私は、ファイルから大量のデータを読んで、世話をするためのヒントやトリックが必要です。

また、mmapがこれらの従来のI/Oよりも有利な場合は、状況を詳しく説明してください。

プラットフォーム:Linux、gccコンパイラ

+0

[この質問(http://stackoverflow.com/q/258091/1025391)、[この質問](http://stackoverflow.com/q/10380745/1025391)、[この質問](http://stackoverflow.com/q/8056984/1025391)? – moooeeeep

答えて

2

ブロック単位で読み込むことをお勧めします。巨大なファイルの場合、ヒープ内に膨大な量のメモリを割り当てる必要はありません。 ファイルが数MBのオーダである場合は、charバッファ内でファイル全体を一度に読み取って、そのバッファを使用してデータを処理できると思います。これは、ファイルから何度も何度も読み取るよりも速くなります。

3

mmapを使用してファイルを作成しましたか?

関連する問題