【问题标题】:Address space independent representation of objects对象的地址空间独立表示
【发布时间】:2016-04-15 09:12:51
【问题描述】:

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

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

如何在 c++ 中以独立于地址空间的方式表示对象?

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

【问题讨论】:

  • 这句话基本上意味着表示不应该包含指针。
  • @n.m.:我不这么认为,指针在 C++ 中无处不在
  • “如何在 c++ 中以独立于地址空间的方式表示对象?” 大多数时候,对象(类实例)实际上是以独立于地址空间的方式表示的,你的问题不清楚。
  • @πάνταῥεῖ 澄清了这一点。
  • @BasileStarynkevitch 您自己的回答暗示(不应依赖地址 => 不应包含地址)。

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


【解决方案1】:

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

所以如果你在某个key上使用一些hash table,你不会使用key的地址进行hash,而是使用一些与key的内容相关的hash。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    命令模式的最常见表现形式是,命令对应的数据以独立于地址空间的方式传输:

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

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

    如何在 c++ 中以独立于地址空间的方式表示对象?

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

    【讨论】:

      【解决方案3】:

      至于你的问题更新:

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

      这是使用反序列化将任何命令对象传递给另一个进程和适当的 IPC 技术(最简单的传输技术是基于套接字的通信恕我直言)。

      没有用于反序列化的 c++ 标准惯用解决方案,但 google protobufboost::serialization 可以提供很好的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-06
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        • 2015-02-09
        • 1970-01-01
        相关资源
        最近更新 更多