0

我真正想做的是将某个内存区域中的写入重定向到两个进程之间共享的单独内存区域。这可以在用户级别完成吗?例如,对于某些页面 X。我想做的是在写入时将其(虚拟到物理)映射更改为某些共享映射。这是可以实现的吗?我也需要透明地做到这一点,即程序仍然通过名称或指针使用页面 X 中的变量,但在幕后,我们使用的是不同的页面。

4

2 回答 2

1

您尝试做的事情并不完全可能,因为至少在 x86 上,内存无法重新映射到细粒度的规模上。您可以重新映射内存的最小量是 4k 页面,包含任何给定变量(例如 X)的页面很可能包含其他变量或程序数据。

话虽如此,您可以使用mmap()系统调用在进程之间共享内存。

于 2012-06-19T14:53:21.933 回答
1

是的,可以在 Linux 中替换内存映射,但不建议这样做,因为它非常不便携。

X首先,您应该通过获取变量地址并屏蔽最后几位来找出变量位于哪个页面- 查询系统页面大小sysconf(_SC_PAGE_SIZE)以了解要屏蔽多少位。然后,您可以使用 to或MAP_FIXED | MAP_SHARED标志创建与此页面重叠的共享内存映射。您应该复制页面的初始内容并在新映射后恢复它。由于其他变量可能驻留在同一页面中,因此您应该非常小心内存布局并更好地使用专用的共享内存对象。mmap(2)mmap2(2)

于 2012-06-19T14:57:52.587 回答