CでRAMにファイルから直接データを読む++
-
23-08-2019 - |
質問
直接RAMにバイナリファイルを読み込む方法はありますか?
、オフ、RAM内のファイルの内容を入れてください、あなたのように素早く、することができますしてください。
行く私が何を意味するかは、ここでは、コンパイラに伝える方法があり、あるファイルがあります、ここでRAMのブロックです現在、私ははifstreamのRAM、64ビットのブロックによって(配列)64ビットのブロックにロードすると、ファイルをステップ実行しています。しかし、私はそれはのようなものだとして、これはそれを遅くしなければならないことを考えている水差し(RAM)にカップ(ファイル)のうち水を救済するシンブルを使用してだけでなくカップをピックアップし(ここではアナロジーが来ます)一度に水差しに全体の内容を傾けます。
これに対する相対的な新参者として、私は完全にこのことについて間違った考えを持っていること - どのguidenceは大きな助けになります。
。私は、RAMへの大きなファイルを取得する最も簡単な方法の後です。
おかげ
解決
何が1回のパスでファイルを読んでからあなたを防ぎますか?メモリ内に収まるように、それはあまりにも大きいですか?
また、マップされたファイルを使用することができ、UNIX:MMAP、Windowsの場合:CreateFileMapping関数
他のヒント
私は何が必要だと思うしかし、APIが依存して、メモリマップドファイルでありますあなたが上であるOS、UNIXで私が)(それはmmapのだと信じています。
mmap
のあなたのために働く必要があります。あなたは、実際のメモリページを参照するまで、ほとんどの実装では、実際にファイルを読んでいないが、それはRAM内のすべての時間だったかのようにどのような場合には、ファイルの内容にアクセスすることができます。
あなたが上であるプラットフォーム言わないが、これは、メモリマップファイルのための仕事のように聞こえるます。
あなたのプログラムが仮想メモリを与えている - それのいくつかは、いくつかのスワップファイルに、RAM上にマッピングされ、あなたはそれについて多くを行うことはできません。しかし、あなただけの大きなブロックをコピーして、ファイルシステムインタフェースを使用してのオーバーヘッドを減らすことができます - 。たとえば、数メガバイトを
私は、これはあなたが求めているものであるかどうかわからないんだけど、あなたはより多くのバイトをバッファリングすることができ、ファイルからの読み込みを高速化します。 fstreamのread()メソッドの第2引数は、入力サイズを指定するように設定することができます。 32K(32 *(2 ^ 10))の値は、読み出し処理を高速化可能性、例えば、彼を与えます。私はあなたが別のバッファサイズで、いくつかのベンチマークを行うことをお勧めます。
あなたは、「スワップ上のファイルを入れて、RAMに常にそれを置くことを避ける」という意味ならば、これはOSが世話をするものですので、私は、あなたがことができると思います。
のDirectX SDKでContentStreaming例を見てください。
これは、ファイルマッピングアプローチを使用しています。明らかに、そのは、Windows APIを使用していますが、あなたが同様に他のプラットフォームのために、対応するAPIを見つけることができます。
興味深いのは、それはあなたのコンテキストでアプローチを示すことです。 (オンデマンド)この場合、地形に(巨大なモデルの部分に/ページングを読み込む
ブーストは、他のものの間のメモリマップドファイルをするために、クロスプラットフォームのサポートを提供しています...