【发布时间】:2013-07-26 12:09:25
【问题描述】:
我正在尝试解决以下问题:拥有一个管理泛型类型的自定义数据容器,我需要允许其他应用程序组件检索容器的内部指针并将其用作简单的 T* 数组区域(不将其视为更智能的阵列持有人)。问题是,在一个非常特殊的情况下,这个记忆被移到了其他地方并被删除了。因此,有大量组件知道旧数据指针,并将使用该指针来访问它们所需的信息。
设置看起来,伪代码,像这样:
container<T>
{
T* ptr;
public:
ContainerInterfaceCode..
}
假设:
T* ptr 是一个伪地址(我可以称之为“虚拟”吗?),它被映射到物理空间 A。
当一个事件发生时,T* ptr 的映射将被设置为另一个物理空间 B。
任何使用T* ptr 的组件都会忘记物理位置的变化,“认为”其数据存储在该虚拟地址。
结论:
因此,我想知道是否存在一种涉及内存映射(虚拟到物理)的机制,它允许处理T* ptr 的映射,从而使其他应用程序组件保持不变。简单地说,T* ptr 应该指向一个在某个部分被映射的内存区域,并且,根据请求,相同的指针将被映射到另一个地方(为了一致性而复制底层数据的地方)。这必须允许无缝过渡。
注意:我不能使用包装器、智能指针、句柄等,因为这意味着修改一个巨大的代码库只是为了一个相当小的修改。
由于我没有找到足够的资源来处理这种情况,也许任何人都可以提供一个简短的网络图,其中包含一些关于该主题的相关阅读材料?
【问题讨论】:
-
我不确定我是否遵循这个问题,但我想说不,这是不可能的。
-
我会用一个小“数字”编辑问题
-
涉及内存映射的机制(虚拟到物理)?
-
@HAL:这个线程osdir.com/ml/linux.drivers.modem.hcf/2002-07/msg00005.html 中提到的函数
OSMapMemory()听起来像是我假设场景的潜在解决方案。这就是为什么我觉得这样的事情是有效的,可以用 C++ 实现。但我没有其他线索。 -
@teodron 可以有两个不同的虚拟地址引用同一个物理内存。你问的是这个吗?
标签: c++ memory-management memory-mapping