tcp通讯学习数据传输
__attribute__((packed))
的作用
这是 GCC 编译器的扩展语法(其他编译器如 Clang 也支持),用于取消结构体的内存对齐(Memory Alignment),具有以下特性:
特性 | 说明 |
---|---|
取消内存对齐优化 | 强制编译器按成员顺序紧密排列,不留空隙。 |
节省内存空间 | 结构体总大小为 sizeof(uint16_t) + sizeof(uint8_t) = 3字节 (无填充字节)。 |
兼容硬件/协议要求 | 常用于网络协议、传感器数据解析等需要精确控制内存布局的场景。 |
默认对齐(无
packed
):typedef struct {uint16_t distance; // 2字节uint8_t intensity; // 1字节 } LidarPointStructDef;
实际大小可能是 4字节(编译器在
intensity
后填充 1 字节以满足对齐)。
packed
取消对齐:typedef struct __attribute__((packed)) {uint16_t distance; // 2字节uint8_t intensity; // 1字节 } LidarPointStructDef;
实际大小严格为 3字节。