代码之家  ›  专栏  ›  技术社区  ›  q126y

对象的地址空间独立表示

  •  0
  • q126y  · 技术社区  · 9 年前

    如果请求的接收者可以用独立于地址空间的方式表示,那么您可以将请求的命令对象转移到另一个进程,并在那里完成请求。

    发件人: http://www.worldcat.org/isbn/9780201633610

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

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

    3 回复  |  直到 9 年前
        1
  •  3
  •   Basile Starynkevitch    9 年前

    我没有这个 设计模式:可重用面向对象软件的元素 我想作者的意思是算法不应该依赖于对象地址的实际值。

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

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

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

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

        2
  •  2
  •   πάντα ῥεῖ    9 年前

    关于您的问题更新:

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

    这是通过使用反序列化来实现的 命令对象 传输到另一个进程和适当的IPC技术(最简单的传输是基于套接字的通信IMHO)。

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

        3
  •  1
  •   R Sahu    9 年前

    我想,你引用的这段话来自命令模式。

    有关这种模式的描述也可以在各种网站上找到。例如。 https://en.wikipedia.org/wiki/Command_pattern .

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

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

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

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

    如果命令的发送方和接收方能够就基本类型的数据表示达成一致,例如 char , int , long , float , double ,它们通常可以将它们用作构建块,以便能够发送和接收更高级别的对象。