关于__attribute__使用

发布时间 2023-08-09 10:56:08作者: ZaiLi

__attribute__配合使用参数介绍

1、aligned 

指定对象的对齐格式(以字节为单位),如:

struct S
 { 
    short b[3]; 
 } __attribute__ ((aligned (8)));  
 
 typedef int int32_t __attribute__ ((aligned (8)));

该声明将强制编译器确保(尽它所能)变量类型为struct S 或者int32_t 的变量在分配空间时采用8字节对齐方式。

如上所述,你可以手动指定对齐的格式,同样,你也可以使用默认的对齐方式。如果aligned 后面不紧跟一个指定的数字值,那么编译器将依据你的目标机器情况使用最大最有益的对齐方式。例如:

struct S 
{ 
   short b[3]; 
} __attribute__ ((aligned));

这里,如果sizeof(short )的大小为2byte,那么,S 的大小就为6 。取一个2 的次方值,使得该值大于等于6 ,则该值为8 ,所以编译器将设置S 类型的对齐方式为8 字节。

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

需要注意的是,attribute 属性的效力与你的连接器也有关,如果你的连接器最大只支持16 字节对齐,那么你此时定义32 字节对齐也是无济于事的。