地址空间独立的对象表示

时间:2016-01-11 06:05:35

标签: c++ design-patterns memory-address command-pattern address-space

  

如果请求的接收者可以以与地址空间无关的方式表示,那么您可以将请求的命令对象传输到其他进程并在那里完成请求。

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

如何在c ++中以与地址空间无关的方式表示对象?

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

3 个答案:

答案 0 :(得分:3)

我没有设计模式:可重复使用的面向对象软件的元素手册,但我想作者意味着算法不应该依赖于对象地址的实际值

因此,如果您在某个键上使用某个哈希表,则不会使用键的地址进行哈希处理,而是使用与键的内容相关的哈希值。

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

要与其他进程通信,您最好使用serialization技术和格式(例如JSON),并且您不希望该格式依赖于实际地址(特别是,它应该永远不会由于ASLR而改变。)

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

答案 1 :(得分:2)

至于你的问题更新:

  

如何在c ++中以地址空间无关的方式表示对象,以便能够将命令对象传输到不同的进程并能够满足请求?

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

没有用于去/序列化的c ++标准惯用解决方案,但google protobufboost::serialization是一个很好的帮助。

答案 2 :(得分:1)

你引用的段落来自Command模式,我认为。

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

命令模式的最常见表现形式是:与命令对应的数据以地址空间无关的方式传输:

  1. 通过网络发送HTTP / FTP请求。
  2. CORBA通过网络呼叫。
  3. 在MS Windows中调用COM。
  4. 我确信还有更多技术可以让您在远程计算机或不同进程中执行命令。它们只能起作用,因为命令可以以与地址空间无关的方式表示,并通过网络或跨进程边界传输。

      

    如何在c ++中以与地址空间无关的方式表示对象?

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