在缺省情況下,編譯器為了讓程序跑得跟快,減少CPU讀取數據的指令周期,對結構體的存儲進行了優化,
比如:如下結構體
struct s
{
char ch;
int i;
};
雖然變量ch本身只有1個字節,但實際上卻占用掉了4個字節,為的是讓第二個int型成員i的地址能夠被4整除。因此實際占用的是8個字節,sizeof(s) = 8。
一般地,可以通過下面的方法來改變缺省的對界條件:
使用偽指令#pragma pack (n),C編譯器將按照n個字節對齊。
使用偽指令#pragma pack (),取消自定義字節對齊方式。
比如:如下結構體
#pragma pack(1)
struct s
{
char ch;
int i;
};
#pragma pack()
這樣結構體實際占用了5個字節,sizeof(s)=5;