如何在虚拟内存中创建文件,并可以使用常规文件函数(如CreateFile,WriteFile等)?
我正在尝试实现一个缓冲文件写入类,但问题是管理需要动态恒定重新分配的缓冲区。
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,您可以调用{{link1:CreateFile
}}并使用{{link2:FILE_ATTRIBUTE_TEMPORARY
}}标志,它将尝试(但不保证)将内容保存在RAM中而不是磁盘上。
我认为你想要整个文件在虚拟内存中?但是这对我来说有点困难,因此我有另一种解决方法。您可以使用VirtualAllocExNuma将文件加载到内存中并进行操作。由于虚拟内存是仅由操作系统保留的内存部分,但在物理上它分散在不同的非统一内存设备(除了RAM)中。
它不是一个文件系统,您无法保存文件,并且如何管理它也很难被跟踪(至少对我来说是这样!)。
VirtualAllocExNuma
在指定进程的虚拟地址空间内保留或提交一块内存区域,并指定物理内存的NUMA节点。