4

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

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

4

3 回答 3

3

你可以使用管道。它们也被操作系统视为“文件”,您可以将 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* 句柄。

于 2016-04-14T20:27:21.173 回答
1

对于 C++,只需使用std::[io]stringstream.

对于 Windows API,您可以CreateFile使用FILE_ATTRIBUTE_TEMPORARY标志调用,它会尝试(但不保证)将内容保存在 RAM 中而不是磁盘中。

于 2012-08-13T16:18:55.163 回答
0

据我所知,您想要虚拟内存中的整个文件吗?但这对我来说有点困难,因此我有另一种解决方法。您可以使用VirtualAllocExNuma将文件加载到内存中并对其进行处理。因为虚拟内存是应该保留的内存部分由操作系统,但在物理上它分散在除 RAM 之外的不同的非统一存储设备中。
它不是一个可以保存文件的文件系统,而且它的管理方式也很难追踪(至少对我来说!)。

VirtualAllocExNuma

在指定进程的虚拟地址空间内保留或提交内存区域,并为物理内存指定 NUMA 节点。

于 2012-08-13T16:28:11.393 回答