与地址空间无关的对象表示

Address space independent representation of objects

本文关键字:对象 表示 地址空间      更新时间:2023-10-16

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

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

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

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

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

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

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

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

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

关于您的问题更新:

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

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

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

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

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

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

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

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

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

如果命令的发送方和接收方能够就基本类型(如charintlongfloatdouble)的数据表示达成一致,则它们通常可以将它们用作构建块,以允许发送和接收更高级别的对象。