Адресное пространство независимого представления объектов

Если получатель запроса может быть представлен независимым от адресного пространства способом, вы можете передать объект команды для запроса другому процессу и выполнить запрос там.

от : http://www.worldcat.org/isbn/9780201633610

Как объект может быть представлен в адресном пространстве независимо от C ++?

редактирование: Как объект может быть представлен в адресном пространстве независимым способом в c ++, чтобы позволить передачу объектов команды другому процессу и быть в состоянии выполнить запрос?

0

Решение

Я думаю, что приведенный вами абзац взят из шаблона Command.

Описание шаблона также можно найти в Интернете на различных сайтах. Например. https://en.wikipedia.org/wiki/Command_pattern.

Наиболее распространенными проявлениями шаблона Command, в которых данные, соответствующие команде, передаются независимым способом в адресном пространстве, являются:

  1. HTTP / FTP запросы через Интернет.
  2. Корба звонит по сети.
  3. COM звонки в MS Windows.

Я уверен, что есть еще много технологий, которые позволяют вам выполнить команду на удаленном компьютере или в другом процессе. Они могут работать только потому, что команда может быть представлена ​​в адресном пространстве независимо и передаваться через сеть или через границы процесса.

Как объект может быть представлен в адресном пространстве независимо от C ++?

Если отправитель и получатель команды могут договориться о представлении данных для основных типов, таких как char, int, long, float, doubleони обычно могут использовать их в качестве строительных блоков, чтобы разрешить отправку и получение объектов более высокого уровня.

1

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

У меня этого нет Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения Книга под рукой, но я предполагаю, что автор подразумевает, что алгоритмы не должны зависеть от фактических значений адресов объектов.

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

Вы не хотите, чтобы наблюдаемое поведение вашей программы зависело от ASLR.

Чтобы общаться с другими процессами, вам лучше использовать сериализация методы и форматы (например, JSON) и вы не хотите, чтобы этот формат зависел от реальных адресов (в частности, он никогда не должен изменяться из-за ASLR).

Это не означает, что на самом низком уровне объекты не содержат адресов или указателей (поскольку указатели повсеместны в C ++). Это просто означает, что вам не нужны конкретные числовые значения этих адресов.

3

Что касается обновлений вашего вопроса:

Как объект может быть представлен в адресном пространстве независимым способом в C ++, чтобы включить передачу командных объектов в другой процесс и сможете выполнить запрос?

Это делается с использованием де- / сериализации для связи любого командные объекты к другому процессу и соответствующей технологии IPC (самая простая для транспорта — IMHO, основанная на сокете).

Стандартных идиоматических решений для С / С не существует, но гугл протобуф или же повышение :: сериализации оказать хорошую помощь

2