内存映射,C ++中的虚拟和物理内存

时间:2013-07-26 12:09:25

标签: c++ memory-management memory-mapping

我正在尝试解决以下问题:拥有一个管理泛型类型的自定义数据容器,我需要允许其他应用程序组件检索容器的内部指针并使用它就好像它是一个简单的{{1}数组区域(不将其视为更智能的数组持有者)。问题是,在一个非常特殊的情况下,这个内存移动到其他地方并被删除。因此,有许多组件知道旧数据指针,并将使用该数据指针访问其所需的信息。

设置看起来像伪代码,类似这样:

T*

假设:

container<T> { T* ptr; public: ContainerInterfaceCode.. } 是伪地址(我可以称之为“虚拟”吗?),它映射在物理空间A中。

当一个事件上升时,T* ptr的映射将被设置为另一个物理空间,B。

任何使用T* ptr的组件都会忽略物理位置的变化,“认为”其数据存储在该虚拟地址中。

结论:

我想知道是否存在一个涉及内存映射(虚拟到物理)的机制,它允许与T* ptr 的映射相互配合,从而留下其他应用程序组件不变。简单地说,T* ptr应该指向一个映射到某个部分的内存区域,并且根据请求,相同的指针将被映射到另一个地方(为了保持一致性,底层数据将被复制)。这必须允许无缝过渡。

注意:我不能使用包装器,智能指针,句柄等,因为这意味着修改庞大的代码库只是为了修改一个,而不是修改。

由于我没有找到足够的资源来处理这种情况,或许任何人都可以提供一个简短的网页,其中包含一些关于这个主题的相关阅读材料?

1 个答案:

答案 0 :(得分:1)

在linux中你可以使用共享内存。共享内存是一种允许两个进程访问同一内存区域的机制,它是一种IPC方法。你可以找到更多 详情请http://en.wikipedia.org/wiki/Shared_memory