在結構體變量的聲明中,經常可以看到__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字節)。