Отображение памяти, виртуальная и физическая память в переполнении стека

Я пытаюсь решить следующую проблему: имея собственный контейнер данных, который управляет универсальным типом, мне нужно разрешить другим компонентам приложения извлекать внутренний указатель контейнера и использовать его, как если бы он был простым T* область массива (не рассматривая ее как более интеллектуальный держатель массива). Проблема в том, что эта память в особом случае перемещается куда-то еще и стирается. Таким образом, существует множество компонентов, которые знают о старом указателе данных и будут использовать его для доступа к необходимой информации.

Настройка выглядит псевдокодом, что-то вроде этого:

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

Гипотеза:

T* ptr такое псевдоадрес (можно ли назвать его «виртуальным»?), который отображается в физическом пространстве А.

Когда происходит событие, T* ptrотображение будет установлено для другого физического пространства, B.

Любой компонент, который использует T* ptr затем забывает об изменении физического местоположения, «думая», что его данные хранятся по этому виртуальному адресу.

Заключение:

Поэтому я хотел бы знать существует ли механизм, включающий отображение памяти (виртуальное в физическое), который позволит манипулировать отображением T* ptr, таким образом оставляя другие компоненты приложения нетронутыми. Проще говоря, T* ptr должен указывать на область памяти, которая отображается в определенной части, и по запросу этот же указатель будет отображаться в другом месте (где базовые данные должны быть скопированы для согласованности). Это должно позволить плавные переходы.

Примечание: я не могу использовать обертки, умные указатели, дескрипторы и т. Д. По той простой причине, что это означает изменение огромной кодовой базы только для одной, довольно незначительной, модификации.

Поскольку я не нашел достаточно ресурсов, посвященных этому сценарию, может кто-нибудь, возможно, представить краткую веб-страницу с некоторыми соответствующими материалами для чтения по этому вопросу?

1

Решение

В Linux вы можете использовать общую память. Общая память — это механизм, который позволяет двум процессам получать доступ к одной и той же области памяти, это своего рода метод IPC. Вы можете найти еще немного
подробности здесь http://en.wikipedia.org/wiki/Shared_memory.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]