對于如下的結構體聲明:
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