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

时间:2011-09-07 13:50:57

标签: c linux memory low-level

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:3)

答案 2 :(得分:3)

我想如果你不喜欢Sys V共享记忆,你可以使用POSIX shared memory objects。它们不是很受欢迎,但至少可以在Linux和BSD上使用。

使用shm_open获得fd后,您可以立即致电shm_unlink。然后,没有其他进程可以附加到同一共享内存,您可以mmap多次。尽管如此,仍有一小部分比赛时间。

答案 3 :(得分:1)

如果您是root用户,可以mmap("/dev/mem", ...),但新内核中有警告,请参阅accessing mmaped /dev/mem?