一、介绍
GNU C 的一大特色就是__attribute__ 机制。__attribute__ 可以设置函数属性(Function Attribute )、变量属性(Variable Attribute )和类型属性(Type Attribute )。
__attribute__ 书写特征是:__attribute__ 前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__ 参数。
__attribute__ 语法格式为:__attribute__ ((attribute-list))
关键字__attribute__ 也可以对结构体(struct )或共用体(union )进行属性设置。大致有六个参数值可以被设定,即:aligned, packed, transparent_union, unused, deprecated 和 may_alias 。
在使用__attribute__ 参数时,你也可以在参数的前后都加上“__” (两个下划线),例如,使用__aligned__而不是aligned ,这样,你就可以在相应的头文件里使用它而不用关心头文件里是否有重名的宏定义。
二、__attribute__ 的参数介绍
1、aligned
对齐属性指定函数的第一条指令的最小对齐方式,以字节为单位,对齐时必须是2的整数幂。
简单来时就是结构体最终的大小是设定值的整数次方倍。
2、packed
系统应该为结构体成员按照最小的对齐方式来对齐边界(1bit或者1字节)
3、section
通常情况下,编译器将变量放置在data段/bss段。然而有时候,可能需要额外增加段,例如,映射到相关到硬件。通过section属性就可以指定到固定段空间。举例如下
struct duart a __attribute__ ((section ("DUART_A"))) = { 0 };
struct duart b __attribute__ ((section ("DUART_B"))) = { 0 };
char stack[10000] __attribute__ ((section ("STACK"))) = { 0 };
int init_data __attribute__ ((section ("INITDATA")));