仮想メモリにファイルを作成するにはどうすればよいですか。また、CreateFile、WriteFileなどの通常のファイル関数を使用できますか?
バッファリングされたファイルライタークラスを実装しようとしていますが、問題は動的な定数の再割り当てを必要とするバッファの管理です。
パイプを使用できます。これらは 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* ハンドルに変換することもできます。
C++ の場合は、std::[io]stringstream
.
Windows API の場合CreateFile
、FILE_ATTRIBUTE_TEMPORARY
フラグを指定して呼び出すことができます。これにより、ディスクではなく RAM にコンテンツを保持しようとします(保証はされません)。
私が思う限り、ファイル全体を仮想メモリ内に置きたいですか?しかし、私には少し難しいと感じているので、別の回避策があります。VirtualAllocExNumaを使用して、ファイルをメモリにロードして作業することができます。仮想メモリは、保持されるはずのメモリの一部であるためです。 OSによるものですが、物理的には、RAM以外のさまざまな非均一メモリデバイスに散在しています。
これは、ファイルを保存できるファイルシステムではなく、ファイルの管理方法も追跡するのが困難です(少なくとも私にとっては!)。
VirtualAllocExNuma
指定されたプロセスの仮想アドレス空間内のメモリ領域を予約またはコミットし、物理メモリのNUMAノードを指定します。