地址space对象的独立表示

Address space independent representation of objects

If the receiver of a request can be represented in an address space-independent way, then you can transfer a command object for the request to a different process and fulfill the request there.

来自 : http://www.worldcat.org/isbn/9780201633610

如何在 c++ 中以地址 space 独立方式表示对象?

编辑:如何在 C++ 中以地址 space 独立方式表示对象,以便能够将命令对象传输到不同的进程并能够满足请求?

我手头没有设计模式:可重用object-oriented软件的元素这本书,但我猜作者的意思是算法不应该依赖于对象地址的实际值。

因此,如果您在某些密钥上使用一些散列 table,您将不会使用密钥的地址进行散列,而是使用与密钥内容相关的一些散列。

您不希望程序的可观察行为依赖于 ASLR

要与其他进程通信,您最好使用 serialization techniques and formats (e.g. JSON),并且您不希望该格式依赖于实际地址(特别是,它不应该因为 ASLR 而改变)。

这并不意味着在最低级别,对象不包含地址或指针(因为指针在 C++ 中无处不在)。这只是意味着您不会关心这些地址的特定数值。

关于您的问题更新:

How can an object be represented in address space independent way in c++ so as to enable transfer of command objects to different process and be able to fulfil the request?

这是使用 de-/serialization 将任何 命令对象 传送到另一个进程和适当的 IPC 技术(最简单的传输技术是基于套接字的通信恕我直言)完成的。

没有针对 de-/serialization 的 c++ 标准惯用解决方案,但 google protobuf or boost::serialization 提供了很好的帮助。

我认为你引用的段落来自命令模式。

也可以在各种站点的 Web 上找到对该模式的描述。例如。 https://en.wikipedia.org/wiki/Command_pattern.

命令模式的最常见表现形式,其中与命令相对应的数据以地址space独立方式传输是:

  1. HTTP/FTP 通过网络请求。
  2. CORBA 通过网络调用。
  3. MS 中的 COM 调用 Windows。

我相信还有很多技术可以让您在远程机器或不同的进程中执行命令。它们之所以能够工作,是因为命令可以用地址 space 独立的方式表示并跨网络或跨进程边界传输。

How can an object be represented in address space independent way in c++?

如果命令的发送者和接收者可以就基本类型的数据表示达成一致,例如 charintlongfloatdouble,他们通常可以将它们用作构建块来启用更高级别对象的发送和接收。