



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
_attribute_(packed)详解(2012-02-24 15:43:38) 转载标签: it分类: linux程序 1. _attribute_ (packed) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关,gcc编译器不是紧凑模式的,我在windows下,用vc的编译器也不是紧凑的,用tc的编译器就是紧凑的。例如:在TC下:struct my char ch; int a; sizeof(int)=2;sizeof(my)=3;(紧凑模式)在GCC下:struct my char ch; int a; sizeof(int)=4;sizeof(my)=8;(非紧凑模式)在GCC下:struct my char ch; int a;_attrubte_ (packed) sizeof(int)=4;sizeof(my)=52. _attribute_关键字主要是用来在函数或数据声明中设置其属性。给函数赋给属性的主要目的在于让编译器进行优化。函数声明中的_attribute_(noreturn),就是告诉编译器这个函数不会返回给调用者,以便编译器在优化时去掉不必要的函数返回代码。GNU C的一大特色就是_attribute_机制。_attribute_可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。_attribute_书写特征是:_attribute_前后都有两个下划线,并且后面会紧跟一对括弧,括弧里面是相应的_attribute_参数。_attribute_语法格式为:_attribute_ (attribute-list)其位置约束:放于声明的尾部“;”之前。函数属性(Function Attribute):函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。_attribute_机制也很容易同非GNU应用程序做到兼容之功效。GNU CC需要使用 Wall编译器来击活该功能,这是控制警告信息的一个很好的方式。packed属性:使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是一字节对齐,对域(field)是位对齐。如果你看过GPSR协议在TinyOS中的实现,你一定会注意到下面的语句:typedef struct double x;double y; _attribute_(packed) position_t;开始我们还可以理解,不久是定义一个结构体嘛!不过看到后面的语句,你可能就会一头雾水了, _attribute_(packed)是什么东西?有什么作用?一连串的疑问马上就会从你脑袋里冒出来。虽然这个对理解整个程序没有什么影响,但我不想让这些疑问一直呆在我的脑子里,负担太重。省得以后念念不忘,而且也许有一天可以用的上呢。搞清楚这个问题吧!GNU C的一大特色(却不被初学者所知)就是_attribute_机制。_attribute_可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。_attribute_语法格式为:_attribute_ (attribute-list)其位置约束为:放于声明的尾部“;”之前。packed是类型属性(Type Attribute)的一个参数,使用packed可以减小对象占用的空间。需要注意的是,attribute属性的效力与你的连接器也有关,如果你的连接器最大只支持16字节对齐,那么你此时定义32字节对齐也是无济于事的。使用该属性对struct或者union类型进行定义,设定其类型的每一个变量的内存约束。当用在enum类型定义时,暗示了应该使用最小完整的类型(it indicates that the smallest integral type should be used)。下面的例子中,my-packed-struct类型的变量数组中的值会紧凑在一起,但内部的成员变量s不会被“pack”,如果希望内部的成员变量也被packed的话,my-unpacked-struct也需要使用packed进行相应的约束。struct my_unpacked_structchar c;int i;struct my_packed_structchar c;int i;struct my_unpacked_struct s;_attribute_ (_packed_);在每个系统上看下这个结构体的长度吧。内存对齐,往往是由编译器来做的,如果你使用的是gcc,可以在定义变量时,添加_attribute_,来决定是否使用内存对齐,或是内存对齐到几个字节,以上面的结构体为例:1)到4字节,同样可指定对齐到8字节。struct studentchar name7;uint32_t id;char subject5; _attribut
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中心镇市场改造方案(3篇)
- 常见架施工方案(3篇)
- 世说新语二则与梯田文化解析
- 校园元旦活动策划与执行
- 四级听力及讲解
- 关于服装产品服务方案(3篇)
- 快餐摆摊定价方案(3篇)
- 通道护墙塌陷维修方案(3篇)
- 物业日常水管维护方案(3篇)
- 电力施工内部控制方案(3篇)
- 妇女维权法律知识讲座
- 2025年内蒙古自治区中考语文真题含答案
- 2025版危险货物道路运输综合预案(电石)
- 2025年中医确有专长考试试题及答案
- DB32∕T 4553-2023 医疗机构医疗器械不良事件监测工作指南
- 2025年机关事业单位技能资格考试-政工历年参考题库含答案解析(5套共100道单选合辑)
- 关于工勤人员管理办法
- 传统丧事流程安排方案
- 老中医讲辟谷课件
- 殡葬政策培训课件
- 原核生物(细菌、蓝藻等)的主要类群和特征测试题带答案
评论
0/150
提交评论