CSAPP读书笔记——结构体的内存对齐

本文详细介绍了计算机内存对齐的规则和目的,通过实例分析了结构体在内存中的布局,探讨了不同顺序对内存浪费的影响,并提出了按照字节大小排序数据域以减少内存浪费的优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分配内存时,许多计算机系统会对内存的地址施加一定的规则。一般来讲,分配的内存的地址最好是K的倍数(K = 2,4,8)。这个设定的目的是简化处理器与内存系统的接口设计,这样分配内存的操作只需要用一条指令即可完成
不同的计算机系统有不同的限制规则,道理来讲,这种K字节强制对齐虽然会浪费一些内存,但是会提高效率。
为此,微软的操作系统强制要求:

K
### ROS 2 中 RMW 的实现原理 ROS 2 使用了一种分层架构设计,其中底层通信依赖于 Real-Time Middleware Interface (RMW),这是一个抽象层,允许 ROS 2 利用不同的数据分发服务(DDS)供应商来处理节点之间的消息传递。这种设计使得 ROS 2 能够灵活地支持多种中间件实现。 #### RMW 层的作用 RMW 提供了一个通用接口,用于与各种 DDS 实现交互。它屏蔽了不同 DDS 库的具体细节,使上层 API 可以保持一致性和可移植性。通过这种方式,开发者可以选择最适合其应用场景的 DDS 实现[^1]。 #### 支持的 DDS 实现 在 ROS 2 中,可以通过设置环境变量 `RMW_IMPLEMENTATION` 来指定所需的 DDS 实现。以下是常见的几种选项及其特点: - **CycloneDDS**: 这是一个轻量级、高性能的 DDS 实现,适合资源受限的嵌入式系统。 - **Fast DDS**: 原名为 eProsima Fast RTPS,提供丰富的功能集和良好的性能表现。 - **Connext DDS**: 由 RTI 开发,具有强大的商业支持以及广泛的工业应用案例。 - **GurumDDS**: 一种开源 DDS 解决方案,虽然不如其他几个流行,但在某些特定场景下也有不错的表现[^2]。 #### 配置方法 要更改当前使用的 DDS 实现,只需修改环境变量即可。例如,在 Linux 系统中执行以下命令切换到 CycloneDDS: ```bash export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp ``` 对于 Windows 用户,则应使用 PowerShell 或 CMD 输入相应语法完成相同操作。 ### 发布者的创建过程详解 当涉及到实际的消息发送时,通常会涉及发布者对象的实例化。这一步骤需调用 Node 对象上的 create_publisher 方法,为其提供三个必要参数:消息类型定义、目标主题名字符串形式表示以及服务质量策略(QoS Profile)[^3]。 具体而言,这些要素共同决定了如何封装待传输的数据包以便网络上传输;同时也影响接收端解码恢复原始结构的能力。 下面给出一段简单的 Python 示例代码展示这一流程: ```python import rclpy from std_msgs.msg import String def main(args=None): rclpy.init(args=args) node = rclpy.create_node('minimal_publisher') publisher = node.create_publisher(String, 'topic', 10) # 参数分别为消息类型、话题名称和服务质量等级 msg = String() msg.data = 'Hello World!' while True: node.get_logger().info(f'Sending message: {msg.data}') publisher.publish(msg) if __name__ == '__main__': main() ``` 此脚本展示了基本的发布逻辑——初始化上下文之后建立新节点分配给定属性值至对应字段位置处等待循环广播直至程序终止为止。 ### 客户端函数剖析 除了上述提到的内容外,《深入解析ROS 2的客户端创建》一文中还提供了关于 `create_client` 函数更为详尽的技术解读。该部分不仅涵盖了理论层面的知识点说明还包括实践中的注意事项等方面的信息[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值