-
__attribute__((packed))
详解
(2012-02-24 15:43:38)
转载▼
标签:
分类:
linux
程序
it
1.
__attribute__ ((packed))
的作用就是告诉编译器取消结构
在编译过程中的优化对齐
,
按照实
际占
用字节数进行对齐,是
GCC
特有的语法。这个功能是跟操作系
统没关系,跟编译器有
关,
gcc
编译
器不是紧凑模式的,我在
windows
下,用
vc
的编译器也不是紧凑的,用
tc
< br>的
编译器就是紧凑的。例如:
在
TC
下:
struct my{
char ch; int a;} sizeof(int)=2;sizeof(my)=3;
(紧凑模式)
在
GCC<
/p>
下:
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__((n
oreturn))
,
就是告诉编译器这个函
< br>数不会返回给调用者,以便编译器在优化时去掉不必要的函数返回代码。
GNU C
的一大特色就是
__att
ribute__
机制。
__attribute__
可以设置函数属性(
Function
Att
ribute
)、变量属性(
Variable
Attribute
)和类型属性(
Type
Attribute
)。
__attribute__
书写特征是:
__
attribute__
前后都有两个下划线,并且后面会紧跟一对括弧,括
弧里面是相应的
__attribute__
参数
。
__attribute__<
/p>
语法格式为:
__attribute__ ((attribute-list))
其位置约束:放于声明的尾部
“
p>
;
”
之前。
函数属性(
Function At
tribute
):函数属性可以帮助开发者把一些特性添加到函数声明中,
从而可以使编译器在错误检查方面的功能更强大。
__attribute
__
机制也很容易同非
GNU
应用
p>
程序做到兼容之功效。
GNU CC
需要使用
–
Wall
编译器来击活该功能,这是控制警告信息
的一个很好的方式。
packed
属性:使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是
一字节对齐,对域(
field
)是位对齐。
如果你看过
GPSR
协议在
TinyOS
中的实现,你一定会注意到下面的
语句:
typedef struct {
double x;
double y;
} __attribute__((packed))
position_t;
开始我们还可以理解,
不久是定义一个结构体嘛!
不过看到后面的语句,
你
可能就会一头雾
水了,
’ __attribute__((p
acked))’
是什么东西?有什么作用?一连串的疑问马上就会从你脑袋
里冒出来。
虽然这个对理解整个程序没有什么影响,
但我不想让这些疑问一直呆在我的脑子
里,负担太重。省得以后念念不忘,而且也许有
一天可以用的上呢。搞清楚这个问题吧!
GNU C
的一大特色
(却不被初学者所知)
就是
__attribute__
机制。
__att
ribute__
可以设置函数
属性(
Function
Attribute
)、变量属性(
Variable
Attribute
)和类型属性(
Type
Attribute
)。
__att
ribute__
语法格式为:
__attribute__ ((attribute-list))
其位置约束为:放于声明的尾部
“
;
”
之前。
packed
是类型属性(
Type
Attribute
)的一个参数,使用
packed
可以减小对象占用的空间。
需要注意的是,
at
tribute
属性的效力与你的连接器也有关,如果你的连接器最大只支持
16
字节对齐,那么你此时定义
32
字节对齐也是无济于事的。
-
-
-
-
-
-
-
-
-
上一篇:对逝者表达哀思的语言100句
下一篇:节哀安慰短信