2017-01-30 8 views
0

私が求めている質問は非常に簡単です。ヒープにメモリがなくても大容量のファイル(6GB)を読み込みたいと言うことができます。どうすればそれができますか? (私が主に尋ねるのは、ファイルの一部を読み込み、バッファをクリアしてファイルの次の部分を読む方法がある場合です)ヒープ内の大きなファイルの内容をメモリエラーなしで読み取るには

+1

どの言語、CまたはC++?違いがあるかもしれません。 C++言語には 'operator new'と' placement new'があり、C言語ではありません。 –

+0

主にcを求めています –

+1

ファイルをメモリに割り当てる必要がありますか?しかし、ファイル全体をメモリに保存する理由はありません。データを読み込んでバッファに入れる必要があります。次に、あなたはそれを使って何かをしてから、無料のバッファーを使うか、ファイルを部分的にコピーしたいのですか? – krlc

答えて

1

メモリ容量と可用性は、プラットフォームとオペレーティングシステムによって異なります。

一部のオペレーティングシステムでは、メモリマッピングは、オペレーティングシステムがデータをメモリに読み込み管理するファイルです。オーバーフロー無し

読み出しは(別名Cでfread及びC++でistream::read)を読み出すブロックを使用することによって達成されます。入力関数にブロック内の読み込み量を指定すると、関数は実際に読み込まれた量を返します。ブロックサイズは、データに割り当てられたメモリ以下である必要があります。次の読み込みは、ファイルの次の場所を開始します。すべてのデータを読み込むループを実行します。

また、メモリ内のすべてのデータを同時に保持する理由があることを確認してください。ほとんどのプログラムは、限られた時間だけ小さなデータしか保持しません。

関連する問題