c - 如何在 linux 上将两个虚拟地址映射到同一物理内存上?

标签 c linux memory low-level

我面临着一个非常棘手的问题。我试图让 2 个虚拟内存区域指向相同的物理内存。关键是在不同的内存区域有不同的页面保护参数。

在这个论坛上,用户似乎有一个解决方案,但似乎有点老套,而且很明显可以在性能方面做得更好: http://www.linuxforums.org/forum/programming-scripting/19491-map-two-virtual-memory-addres-same-physical-page.html

因为我面临同样的问题,我想在这里试一试,看看是否有人有更好的主意。不要害怕提及引擎盖背后的肮脏细节,这就是这个问题的目的。

提前致谢。

最佳答案

从 Linux 内核 3.17(2014 年 10 月发布)开始,您可以使用 memfd_create系统调用以创建由匿名内存支持的文件描述符。然后多次映射同一区域,如上述答案中所述。

请注意,memfd_create 系统调用的 glibc 包装器已添加到 glibc 2.27(2018 年 2 月发布)中。 glibc manual还描述了返回的描述符如何用于创建到同一底层内存的多个映射。

关于c - 如何在 linux 上将两个虚拟地址映射到同一物理内存上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7335007/

相关文章:

c - 如何使单个 "makefile"创建 3 个输出二进制文件

linux - 如何在 Linux 终端中每 2 小时删除一次日志

python - 线程内存使用量不断增加

python - Python 如何处理您未放入变量的 TCP 响应?

ios - Swift - 从 UIViewControllers 转到 'in' 和 'back' 时内存增加

c - 为什么当我用记事本创建 Makefile 时,它​​保存的是 .txt

c++ - 使用 cvWarpPerspective 变形图像导致图像的某些部分超出可视区域

c - 将函数名称作为字符指针传递给 C 中的 pthread_create

c - 后缀 prefix++ 和二进制 & 运算符的优先级

asp.net-mvc - linux 开发环境中.net MVC 的等价物是什么?