地址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独立方式传输是:
- HTTP/FTP 通过网络请求。
- CORBA 通过网络调用。
- MS 中的 COM 调用 Windows。
我相信还有很多技术可以让您在远程机器或不同的进程中执行命令。它们之所以能够工作,是因为命令可以用地址 space 独立的方式表示并跨网络或跨进程边界传输。
How can an object be represented in address space independent way in c++?
如果命令的发送者和接收者可以就基本类型的数据表示达成一致,例如 char
、int
、long
、float
、double
,他们通常可以将它们用作构建块来启用更高级别对象的发送和接收。
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独立方式传输是:
- HTTP/FTP 通过网络请求。
- CORBA 通过网络调用。
- MS 中的 COM 调用 Windows。
我相信还有很多技术可以让您在远程机器或不同的进程中执行命令。它们之所以能够工作,是因为命令可以用地址 space 独立的方式表示并跨网络或跨进程边界传输。
How can an object be represented in address space independent way in c++?
如果命令的发送者和接收者可以就基本类型的数据表示达成一致,例如 char
、int
、long
、float
、double
,他们通常可以将它们用作构建块来启用更高级别对象的发送和接收。