关键词不能为空

当前您在: 主页 > 英语 >

__attribute__((packed))详解

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-26 17:33
tags:

-

2021年2月26日发(作者:陶冶情操)


__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;


(非紧凑模式)

< p>



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__


前后都有两个下划线,并且后面会紧跟一对括弧,括

< p>
弧里面是相应的


__attribute__


参数 。




__attribute__< /p>


语法格式为:




__attribute__ ((attribute-list))



其位置约束:放于声明的尾部





之前。




函数属性(


Function At tribute


):函数属性可以帮助开发者把一些特性添加到函数声明中,

< p>
从而可以使编译器在错误检查方面的功能更强大。


__attribute __


机制也很容易同非


GNU


应用


程序做到兼容之功效。




GNU CC


需要使用




Wall


编译器来击活该功能,这是控制警告信息 的一个很好的方式。




packed


属性:使用该属性可以使得变量或者结构体成员使用最小的对齐方式,即对变量是


一字节对齐,对域(


field


)是位对齐。



如果你看过


GPSR


协议在


TinyOS


中的实现,你一定会注意到下面的 语句:



typedef struct {


double x;


double y;


} __attribute__((packed)) position_t;



开始我们还可以理解,


不久是定义一个结构体嘛!


不过看到后面的语句,


你 可能就会一头雾


水了,


’ __attribute__((p acked))’


是什么东西?有什么作用?一连串的疑问马上就会从你脑袋

< p>
里冒出来。


虽然这个对理解整个程序没有什么影响,


但我不想让这些疑问一直呆在我的脑子


里,负担太重。省得以后念念不忘,而且也许有 一天可以用的上呢。搞清楚这个问题吧!



GNU C


的一大特色


(却不被初学者所知)


就是


__attribute__


机制。


__att ribute__


可以设置函数


属性(


Function Attribute


)、变量属性(


Variable Attribute


)和类型属性(


Type Attribute


)。



__att ribute__


语法格式为:



__attribute__ ((attribute-list))


其位置约束为:放于声明的尾部





之前。



packed


是类型属性(


Type Attribute


)的一个参数,使用


packed


可以减小对象占用的空间。


需要注意的是,


at tribute


属性的效力与你的连接器也有关,如果你的连接器最大只支持

< p>
16


字节对齐,那么你此时定义


32


字节对齐也是无济于事的。


-


-


-


-


-


-


-


-



本文更新与2021-02-26 17:33,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/673148.html

__attribute__((packed))详解的相关文章