如何在虚拟内存中创建文件,我可以在其上使用普通文件函数,如 CreateFile、WriteFile 等?
我正在尝试实现一个缓冲文件编写器类,但问题是管理一个需要动态常量重新分配的缓冲区。
你可以使用管道。它们也被操作系统视为“文件”,您可以将 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将文件加载到内存中并对其进行处理。因为虚拟内存是应该保留的内存部分由操作系统,但在物理上它分散在除 RAM 之外的不同的非统一存储设备中。
它不是一个可以保存文件的文件系统,而且它的管理方式也很难追踪(至少对我来说!)。
VirtualAllocExNuma
在指定进程的虚拟地址空间内保留或提交内存区域,并为物理内存指定 NUMA 节点。