1

私はC言語でプログラミングしています。通常、freadまたはシステムコールの読み取りを使用するファイルから大きなデータを読み取らなければならない場合があります。これは、ストリームI/OまたはシステムコールI/Oのいずれかを意味します。

このような大きなデータを読み取って、ブロックサイズを計算し、それに応じて読み取る場合、効率的に読み取るのに役立つかどうかを尋ねたいと思います。

システムコールの読み取りが遅くなる可能性があることや、ネットワークソケットを処理する必要がある場合は、ストリームベースのI / Oを使用する代わりにこれらを使用する必要があるなど、他の条件があることを知っています。最適化された結果が得られます。同様に、ファイルから大きなデータを読み取るためのヒントとコツ、および注意すべき点が必要です。

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

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

4

2 に答える 2

4

を使用してファイルをメモリマッピングすることを検討しましたmmapか?

于 2012-05-10T07:45:33.893 に答える
2

ブロックで読むことは常に良い考えだと思います。巨大なファイルの場合、ヒープに大量のメモリを割り当てたくないことは明らかです。ファイルが数 MB 程度の場合は、ファイル全体を char バッファーで一度に読み取り、そのバッファーを使用してデータを処理できると思います。これは、ファイルから何度も読み取るよりも高速です。

于 2012-05-10T07:44:36.310 に答える