要改變編譯器默認的字節對齊方式,Linux下可使用一下兩種方法:
一:
#pragma pack (n) //C編譯器將按照n個字節對齊。
#pragma pack () //取消自定義字節對齊方式
例如:
#pragma pack(1) //一下內容按1個字節對齊
struct Test
{
char a;
int b;
}
#pragma pack() //恢復默認
二:
__attribute((aligned (n))) //讓所作用的結構成員對齊在n字節自然邊界上。如果結構中有成員的長度大於n,則按照最大成員的長度來對齊。
__attribute__ ((packed)) //取消結構在編譯過程中的優化對齊,按照實際佔用字節數進行對齊。
例如:
struct Test1
{
char a;
int b;
}__attribute((aligned (1)));
//此時結構體大小爲8(假設int大小爲4),因爲int的大小大於1,所以a按大小爲4算。
struct Test2
{
char a;
int b;
}__attribute((packed));
//此時結構體按實際佔用字節數進行對齊,大小爲5.
如有不對的地方,請大家指出。