0

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

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

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

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

+0

Эта фраза в основном означает, что представление не должно содержать указателей. –

+0

@ nm: Я так не думаю, указатели повсеместны в C++ –

+0

_ «Как объект может быть представлен в пространстве адресов автономным способом в C++?» _ Большинство объектов времени (экземпляры классов) фактически представлены в адресе независимо от пространства, ваш вопрос неясен. –

ответ

1

Пункт, который вы указали, из шаблона Command, я думаю.

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

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

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

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

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

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

3

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

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

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

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

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

2

Как для обновления вопроса:

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

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

Нет стандартных идиоматических решений C++ для де-/сериализации, но google protobuf или boost::serialization - это хорошая помощь.

Смежные вопросы