对于如下的结构体声明:
struct Foo
{
char c;
float f;
} __attribute__((packed));
__attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。经过上述属性设置之后,Foo结构体的大小为5个字节,如果不设置该属性并且没有显式指定字节对齐属性的话,可能为8个字节。关于字节对齐,这里不多赘述。
其中__attribute__机制是gcc编译器特有的。用来在函数或数据声明中设置其属性,__attribute__可以设置函数属性、变量属性、类型属性。
关于gcc的__attribute__的更多技术细节,可以参看如下链接:
1.
http://unixwiz.net/techtips/gnu-c-attributes.html
2.
http://www.yuanma.org/data/2006/0625/article_948.htm