您的位置:首页 > 编程语言 > C语言/C++

__attribute__机制介绍

2014-01-15 18:12 281 查看
 


__attribute__机制介绍

原文地址:http://blog.csdn.net/ithomer/article/details/6566739

GNU C的一大特色(却不被初学者所知)就是__attribute__机制。
__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)
__attribute__前后都有两个下划线,并且后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数
__attribute__语法格式为:
__attribute__ ( ( attribute-list ) )
函数属性(Function Attribute),函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查方面的功能更强大。
__attribute__机制也很容易同非GNU应用程序做到兼容。
GNU CC需要使用 –Wall,这是控制警告信息的一个很好的方式。下面介绍几个常见的属性参数
【我只转载 了一个水泥工,其余的可以去原博客学习】

aligned (alignment)
该属性设定一个指定大小的对齐格式(以字节为单位),例如:
struct S { short f[3]; } __attribute__ ( ( aligned (8) ) );
typedef  int  more_aligned_int __attribute__ ( ( aligned (8) ) );
这里,如果sizeof(short)的大小为2(byte),那么,S的大小就为6。取一个2的次方值,使得该值大于等于6,则该值为8,所以编译器将设置S类型的对齐方式为8字节。该声明将强制编译器确保(尽它所能)变量类型为struct S或者more-aligned-int的变量在分配空间时采用8字节对齐方式。
如上所述,你可以手动指定对齐的格式,同样,你也可以使用默认的对齐方式。例如:
struct S { short f[3]; } __attribute__ ( (aligned) );
上面,aligned后面不紧跟一个指定的数字值,编译器将依据你的目标机器情况使用最大最有益的对齐方式。
int  x __attribute__ ( (aligned (16) ) )  =  0;
编译器将以16字节(注意是字节byte不是位bit)对齐的方式分配一个变量。也可以对结构体成员变量设置该属性,例如,创建一个双字对齐的int对,可以这么写:
Struct  foo {  int  x[2] __attribute__ ( (aligned (8) ) );  };
选择针对目标机器最大的对齐方式,可以提高拷贝操作的效率。

aligned属性使被设置的对象占用更多的空间,相反的,使用packed可以减小对象占用的空间。

需要注意的是,attribute属性的效力与你的连接器也有关,如果你的连接器最大只支持16字节对齐,那么你此时定义32字节对齐也是无济于事的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++