Я пытаюсь решить следующую проблему: имея собственный контейнер данных, который управляет универсальным типом, мне нужно разрешить другим компонентам приложения извлекать внутренний указатель контейнера и использовать его, как если бы он был простым T*
область массива (не рассматривая ее как более интеллектуальный держатель массива). Проблема в том, что эта память в особом случае перемещается куда-то еще и стирается. Таким образом, существует множество компонентов, которые знают о старом указателе данных и будут использовать его для доступа к необходимой информации.
Настройка выглядит псевдокодом, что-то вроде этого:
container<T>
{
T* ptr;
public:
ContainerInterfaceCode..
}
Гипотеза:
T* ptr
такое псевдоадрес (можно ли назвать его «виртуальным»?), который отображается в физическом пространстве А.
Когда происходит событие, T* ptr
отображение будет установлено для другого физического пространства, B.
Любой компонент, который использует T* ptr
затем забывает об изменении физического местоположения, «думая», что его данные хранятся по этому виртуальному адресу.
Заключение:
Поэтому я хотел бы знать существует ли механизм, включающий отображение памяти (виртуальное в физическое), который позволит манипулировать отображением T* ptr
, таким образом оставляя другие компоненты приложения нетронутыми. Проще говоря, T* ptr
должен указывать на область памяти, которая отображается в определенной части, и по запросу этот же указатель будет отображаться в другом месте (где базовые данные должны быть скопированы для согласованности). Это должно позволить плавные переходы.
Примечание: я не могу использовать обертки, умные указатели, дескрипторы и т. Д. По той простой причине, что это означает изменение огромной кодовой базы только для одной, довольно незначительной, модификации.
Поскольку я не нашел достаточно ресурсов, посвященных этому сценарию, может кто-нибудь, возможно, представить краткую веб-страницу с некоторыми соответствующими материалами для чтения по этому вопросу?
В Linux вы можете использовать общую память. Общая память — это механизм, который позволяет двум процессам получать доступ к одной и той же области памяти, это своего рода метод IPC. Вы можете найти еще немного
подробности здесь http://en.wikipedia.org/wiki/Shared_memory.
Других решений пока нет …