码迷,mamicode.com
首页 > 其他好文 > 详细

__attribute__((packed)) 详解

时间:2014-06-29 18:21:47      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   数据   c   

摘自LDD3

为了编写可以在不同平台之间可移植的数据项的数据结构,除了规定特定的字节序以外,还应该始终强制数据项的自然对齐。
自然对齐(Natural Alignment)是指在数据项大小的整数倍(例如,8字节数据项存入8的整数倍的地址)的地址处存储数据项。
强制自然对齐可以防止编译器移动数据结构的字段,你应该使用填充符(filer)字段来避免在数据结构中留下空洞。

编译器本身可能会往结构体中插入填充数据,以确保每个字段的对齐可以在目标处理器上取得好的性能。
如果正在定义一个和设备要求的结构体相匹配的结构体,这种自动填充会破坏你的意图。解决的办法是告诉编译器结构体必须是“填满的”,不能添加填充符。
就是在结构体声明的地方加上__attribute__((packed)),例如:

struct { 
    u16 id; 
    u64 lun; 
    u16 reserved1; 
    u32 reserved2; 
} __attribute__ ((packed)) scsi;

如果没有__attribute__((packed)),lun字段前面会被插入两个填充字节,按4字节对齐。

__attribute__((packed)) 详解,布布扣,bubuko.com

__attribute__((packed)) 详解

标签:style   blog   color   使用   数据   c   

原文地址:http://www.cnblogs.com/craftor/p/3811560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!