首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从用户空间管理虚拟内存

从用户空间管理虚拟内存
EN

Stack Overflow用户
提问于 2012-06-19 22:38:08
回答 2查看 327关注 0票数 0

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-19 22:57:53

是的,在Linux中替换内存映射是可能的,尽管这样做并不可取,因为它是高度不可移植的。

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

票数 1
EN

Stack Overflow用户

发布于 2012-06-19 22:53:22

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

也就是说,您可以使用mmap()系统调用在进程之间共享内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11103322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档