1. 程式人生 > >#pragma pack(1) 含義

#pragma pack(1) 含義

設定結構體的邊界對其為1位元組,也就是所有資料在記憶體中是連續儲存的。

比如你在C語言定義 下面的結構體 :

struct s{

char ch;

int i;

};

在主函式 寫一句 printf("%d", sizeof(struct s))   輸出 結構體所佔位元組數

因為 char 型別佔用一個位元組, int 型別佔用四個位元組。但 結果輸出 為 8。因為編譯器 為了讓程式 跑的很快 ,減少CPU讀取資料的指令週期,對結構體的儲存進行了優化,實際上第一個 char 型別的成員 只能佔 據 一個位元組 ,但實際上 卻 用掉了4 個位元組,為的是讓第二個int型別成員的地址能夠被4 整出。因此佔用的位元組是8.

而#progma pack(1) 讓編譯器將結構體資料強制 連續排列,這樣的話,sizeof(struct s)輸出的結果就是5 了。