关于_attribute_((packed))
来源:互联网 发布:新疆大学知乎 编辑:程序博客网 时间:2024/06/05 22:45
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)=5
2. __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)是位对齐。
- 关于_attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- _attribute_((packed))
- GCC推荐的对齐指令:_attribute_((packed))和_attribute_((aligned(n)))
- 关于__attribute__ ((packed))
- 关于__attribute__((packed))
- 关于linux内核中的"__attribute__ ((packed))"
- 关于linux内核中的"__attribute__ ((packed))"
- 请问高手
- 缺少standard.jar报的错误
- 初学者的迷惑
- WEB编程中POST/GET的具体区别
- 如何添加显示桌面到快速启动栏【Windows XP】?
- 关于_attribute_((packed))
- 项目计划内容
- 百万级数据库系统分层优化——概述
- DedeCms系统的用户用对搜索引擎优化办法
- 网络字节转换inet_aton & inet_ntoa & inet_addr和inet_pton & inet_ntop
- 元旦了 让人又爱又怕!
- PHP字符串颠倒顺序的函数
- 嵌入清单
- core dump 相关保存(转自http://blog.sina.com.cn/s/blog_602f87700100ew04.html)