C ++ / Win32在虚拟内存中创建一个文件

时间:2012-08-13 16:05:51

标签: c++ winapi

如何在虚拟内存中创建文件,我可以在其上使用普通文件函数作为CreateFile,WriteFile等吗?

我正在尝试实现缓冲文件编写器类,但问题是管理需要动态常量重新分配的缓冲区。

3 个答案:

答案 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节点   物理记忆。