//正確
typedef struct a
int m_over;
char m_script_memory[5 * 1024];
}a;//錯誤
typedef struct b
char m_over;
char m_script_memory[5 * 1024];
}b;b 裡 m_over 和m_script_memory不能位元組對齊。使得程式訪問m_script_memory的位置會出錯。由於m_script_memory的型別也是char ,所以編譯器並不會在m_over後面自動補齊位元組。
a 裡 m_over 已經是int,位元組對齊了。
結構體位元組對齊
include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...
結構體位元組對齊
include pragma pack 2 struct t.pragma pack int main int argc,char argv 最後輸出的結果為 8。這個表示是按照2位元組來對齊資料,首先分配2位元組給成員變數i,分配完成後,還剩一位元組,zj add補0 沒法容納成員變數d,此時會再...
結構體位元組對齊
在用sizeof運算子求算某結構體所佔空間時,並不是簡單地將結構體中所有元素各自佔的空間相加,這裡涉及到記憶體位元組對齊的問題。從理論上講,對於任何 變數的訪問都可以從任何位址開始訪問,但是事實上不是如此,實際上訪問特定型別的變數只能在特定的位址訪問,這就需要各個變數在空間上按一定的規則排列,而不是...