1

我正在尝试解决以下问题:拥有一个管理泛型类型的自定义数据容器,我需要允许其他应用程序组件检索容器的内部指针并将其用作简单的T*数组区域(不将其视为更智能的阵列支架)。问题是,在一个非常特殊的情况下,这个记忆被移到了其他地方并被删除了。因此,有大量组件知道旧数据指针并将使用该指针来访问它们所需的信息。

设置看起来像伪代码,如下所示:

container<T>
{ 
  T* ptr;
  public:
  ContainerInterfaceCode..
}

假设:

T* ptr是一个映射在物理空间 A 中的伪地址(我可以称之为“虚拟”吗?)。

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

任何使用T* ptr的组件都不会注意到物理位置的变化,“认为”它的数据存储在那个虚拟地址上。

结论:

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

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

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

4

1 回答 1

1

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

于 2013-07-26T12:21:06.860 回答