如何在虚拟内存中创建文件,我可以在其上使用普通文件函数作为CreateFile,WriteFile等吗?
我正在尝试实现缓冲文件编写器类,但问题是管理需要动态常量重新分配的缓冲区。
答案 0 :(得分:1)
对于C ++,只需使用std::[io]stringstream
。
对于Windows API,您可以使用CreateFile
标记调用FILE_ATTRIBUTE_TEMPORARY
,然后尝试(但不保证)将内容保留在RAM而不是在磁盘上。
答案 1 :(得分:1)
你可以使用烟斗。他们也被认为是"文件"通过操作系统,你可以使用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 *句柄。
答案 2 :(得分:0)
据我所知,你想要虚拟内存中的整个文件?但是对我来说感觉有点困难,因此我有另一个解决方法。你可以使用VirtualAllocExNuma将你的文件加载到内存中并继续工作。因为虚拟内存是内存的一部分,它只是应该由操作系统保留,但在物理上它分散在除RAM之外的不同非统一内存设备上。
它不是一个文件系统,你可以保存你的文件及其管理方式也难以追踪(至少对我来说!)。
VirtualAllocExNuma
在虚拟地址中保留或提交内存区域 指定进程的空间,并为其指定NUMA节点 物理记忆。