__attribute__((packed))的作用

在結構體變量的聲明中,經常可以看到__attribute__((packed))修飾符。這是做什麼用的呢?

__attribute__ ((packed)) 的作用就是告訴編譯器取消結構在編譯過程中的優化對齊,按照實際佔用字節數進行對齊,是GCC特有的語法。

例子:

struct ip{
 unsigned char x:2; 
 unsigned char y:2; 
 unsigned short proto:2; 
 int z:2; 
};

在這裏,結構體所佔的字節是:4

 

struct ip{
 unsigned char x:2; 
 unsigned char y:2; 
 unsigned short proto:2; 
 int z:2; 
} __attribute__((packed));

在這裏,結構體所佔的字節是:1

因此可以看到,packed屬性修改了編譯器對結構體成員的佈局,儘可能壓縮存儲空間。默認情況下,gcc會爲了效率考量,會讓char或者short獨佔一個雙字(4字節)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章