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