我实际上想做的是将某个内存区域中的写入重定向到两个进程之间共享的单独内存区域。这可以在用户级别完成吗?例如,对于某些页面 X。我想做的是在写入时将其(虚拟到物理)映射更改为一些共享映射。这是可以实现的吗?我也需要透明地做到这一点,即程序仍然通过名称或指针使用页面 X 中的变量,但在幕后,我们正在使用不同的页面。
最佳答案
是的,可以在 Linux 中替换内存映射,但不建议这样做,因为它是高度不可移植的。
首先,您应该找出 X
变量位于哪个页面,方法是获取它的地址并屏蔽掉最后几位 - 使用 sysconf(_SC_PAGE_SIZE)< 查询系统页面大小
以便知道要屏蔽掉多少位。然后,您可以使用 MAP_FIXED | 创建一个与此页面重叠的共享内存映射。 MAP_SHARED
标志到 mmap(2)
或 mmap2(2)
。您应该复制页面的初始内容并在新映射后恢复它。由于其他变量可能驻留在同一页中,因此您应该非常注意内存布局,最好使用专用的共享内存对象。
关于c - 从用户空间管理虚拟内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103322/