4

仮想メモリにファイルを作成するにはどうすればよいですか。また、CreateFile、WriteFileなどの通常のファイル関数を使用できますか?

バッファリングされたファイルライタークラスを実装しようとしていますが、問題は動的な定数の再割り当てを必要とするバッファの管理です。

4

3 に答える 3

3

パイプを使用できます。これらは OS によって「ファイル」と見なされ、WriteFile と ReadFile を使用します。

HANDLE               hReadPipe;
HANDLE               hWritePipe;
CreatePipe(&hReadPipe, &hWritePipe , 0, 0);
WriteFile(hWritePipe, "hello", 5, 0, 0);

int sz = GetFileSize(hReadPipe, 0);
assert(sz == 5);
char out[5];
ReadFile(hReadPipe, out, 5, 0,0);

必要に応じて、_open_osfhandle の行に沿って何かを使用して、それらを C FILE* ハンドルに変換することもできます。

于 2016-04-14T20:27:21.173 に答える
1

C++ の場合は、std::[io]stringstream.

Windows API の場合CreateFileFILE_ATTRIBUTE_TEMPORARYフラグを指定して呼び出すことができます。これにより、ディスクではなく RAM にコンテンツを保持しようとします(保証はされません)。

于 2012-08-13T16:18:55.163 に答える
0

私が思う限り、ファイル全体を仮想メモリ内に置きたいですか?しかし、私には少し難しいと感じているので、別の回避策があります。VirtualAllocExNumaを使用て、ファイルをメモリにロードして作業することができます。仮想メモリは、保持されるはずのメモリの一部であるためです。 OSによるものですが、物理的には、RAM以外のさまざまな非均一メモリデバイスに散在しています。
これは、ファイルを保存できるファイルシステムではなく、ファイルの管理方法も追跡するのが困難です(少なくとも私にとっては!)。

VirtualAllocExNuma

指定されたプロセスの仮想アドレス空間内のメモリ領域を予約またはコミットし、物理メモリのNUMAノードを指定します。

于 2012-08-13T16:28:11.393 に答える