与地址空间无关的对象表示
Address space independent representation of objects
如果请求的接收者可以以独立于地址空间的方式表示,那么您可以将请求的命令对象传输到另一个进程,并在那里完成请求。
发件人: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.
命令模式最常见的表现形式是,与命令相对应的数据以地址空间无关的方式传输:
- 网络上的HTTP/FTP请求
- CORBA通过网络进行调用
- MS Windows中的COM调用
我相信还有更多的技术可以让你在远程机器或不同的过程中执行命令。它们之所以能够工作,是因为命令可以以独立于地址空间的方式表示,并通过网络或跨进程边界传输。
在c++中,如何以独立于地址空间的方式表示对象?
如果命令的发送方和接收方能够就基本类型(如char
、int
、long
、float
、double
)的数据表示达成一致,则它们通常可以将它们用作构建块,以允许发送和接收更高级别的对象。
- 具有引用成员的结构是否具有唯一的对象表示形式
- 将 boost 序列化对象的 asio::streambuf 表示转换为 Beast 的 DynamicBody req.body()
- 如何在C++中表示JSON文档的递归对象结构?
- 传递给放置 new 的指针是否是指向其对象表示形式的非 UB 指针?
- 广义 std::function (std::any 表示可调用对象)
- reinterpret_cast可以更改对象表示吗?
- 当表示为对象的一维向量时,有效地旋转 NxM 矩阵 (C++)
- 流对象来表示文件输入,然后是标准输入?
- 在Python中构建类似于__repr__的对象的可打印表示
- ptrdiff_t可以表示指向同一数组对象元素的指针的所有减法吗?
- std::any 表示无法复制构造的对象
- 可以从指向子对象的指针中获取指向完整对象表示元素的指针吗
- 指向对象表示元素或指向提供的存储元素的指针
- 如何将3D .OBJ对象表示为3D数组
- C++设计中,如何用对象表示协议的不同阶段
- 当对象表示硬件组件时,我应该使用指向对象的指针吗
- 与地址空间无关的对象表示
- C++对指针向量进行排序,其中对象表示矩阵坐标
- 对象表示形式的定义和运算符sizeof
- 如何将一组C++动态分配的对象表示为BGL(Boost Graph Library)图,以获得它们的依赖图