c - 将虚拟内存映射到虚拟内存
问题描述
我得到了一个位于内存某处的结构。是否可以在 WinAPI/POSIX 中创建一个内存映射,将结构别名到内存范围的不同部分,以便可以从两个位置访问相同的字节?我无法控制原始结构的位置,但新结构可以存储在任何地方。
我认为,至少在 WinAPI 中,我可以创建一个临时文件并将包含该结构的页面存储在那里,然后我可以(希望)用指向该文件的新页面替换原始页面,然后将文件映射到内存中的新部分。但是,我担心访问内存的性能。有更好的吗?
解决方案
在 Linux 中,您可以使用memfd_create(2)
它来分配可以通过文件描述符访问的内存。然后,您将write(2)
原始数据映射到该内存文件,并mmap(2)
使用MAP_FIXED
标志将其映射到原始位置,然后使用非固定的mmap(2)
. 请注意,映射必须是底层页面大小的倍数(常规地址空间中为 4k,如果 memfd 是从大页面分配的,则为大页面大小)。
推荐阅读
- javascript - 如何将导入文件导入 Angular 应用程序模块
- node.js - 如何根据cheerio中的文本获取元素的属性
- python - 将环境模块加载到 Jupyter Notebook/Lab
- java - 获取缺少列名的 JDBI 错误
- spring-security - 无法使用提供的颁发者解析 OpenID 配置(带有 KeyCloak 的 JHipster)
- c - 使用字符串存储数字的长除法 1/N 算法,过长时创建符号/字母
- android - Firestore 和分页库 3.0
- c - 为什么我不能在我的代码中使用 `libmime`?(OSError:mime.so:未定义符号:magic_load)
- json - 成员类型更改时如何反序列化 JSON
- amazon-web-services - 使用 AWS 资源策略有条件地允许来自 Lambda 的默认 VPC 的流量