對(duì)于如下的結(jié)構(gòu)體聲明:
struct Foo
{
char c;
float f;
} __attribute__((packed));
__attribute__ ((packed)) 的作用就是告訴編譯器取消結(jié)構(gòu)在編譯過(guò)程中的優(yōu)化對(duì)齊,按照實(shí)際占用字節(jié)數(shù)進(jìn)行對(duì)齊。經(jīng)過(guò)上述屬性設(shè)置之后,F(xiàn)oo結(jié)構(gòu)體的大小為5個(gè)字節(jié),如果不設(shè)置該屬性并且沒(méi)有顯式指定字節(jié)對(duì)齊屬性的話,可能為8個(gè)字節(jié)。關(guān)于字節(jié)對(duì)齊,這里不多贅述。
其中__attribute__機(jī)制是gcc編譯器特有的。用來(lái)在函數(shù)或數(shù)據(jù)聲明中設(shè)置其屬性,__attribute__可以設(shè)置函數(shù)屬性、變量屬性、類型屬性。
關(guān)于gcc的__attribute__的更多技術(shù)細(xì)節(jié),可以參看如下鏈接:
1.
http://unixwiz.net/techtips/gnu-c-attributes.html
2.
http://www.yuanma.org/data/2006/0625/article_948.htm