将虚拟内存映射到虚拟内存

时间:2019-08-08 11:53:57

标签: c winapi posix

我提供了位于内存中某个地方的结构。在WinAPI / POSIX中是否可以创建一个内存映射,该映射会将结构别名为内存范围的不同部分,以便可以从两个位置访问相同的字节?我无法控制原始结构的位置,但是新结构可以存储在任何地方。

我认为,至少在WinAPI中,我可以创建一个临时文件并在其中存储包含结构的页面,然后(希望)用指向该文件的新页面替换原始页面,然后映射文件到内存中的新部分。但是,我担心访问内存的性能。有更好的东西吗?

1 个答案:

答案 0 :(得分:0)

在Linux中,您可以使用memfd_create(2)分配可以通过文件描述符访问的内存。然后,您将write(2)的原始数据映射到该内存文件中,并使用mmap(2)标志使用MAP_FIXED将其映射到原始位置,然后将其映射到具有非固定{ {1}}。请注意,映射必须是基础页面大小的倍数(常规地址空间为4k,如果memfd是从大页面分配的,则为大页面大小)。