本文參考:
在做一道題是發現結構體的長度並不簡單的等於各成員長度之和。受限於硬體平台,為了使不同平台下都能正確讀取記憶體單元的資料,變數需以特定的位址進行儲存。需滿足以下三條準則:1、結構體變數的首位址能被其最寬基本型別成員大小所整除;
2、結構體成員相對於結構體首位址的偏移量都是成員大小的整數倍,如有需要,編譯器會在成員間填充位元組;
3、結構體的大小為結構體中最寬基礎型別大小的整數倍。
因此x1.a的位址為0028fd88,x1.b的位址為0028fd8c,x1.c為0028fd90(相對偏移量為8能被4整除)
位元組對齊 結構體變數的sizeof
首先回顧一下,32位與64位 指的是暫存器的位寬 作業系統下,不同資料型別所佔的位元組數 32位作業系統環境下 字元型 char 1 unsigned char 1 整型 int 4 unsigned int 4 short 2 unsigned short 2 long 4 unsigned lo...
結構體位元組對齊
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,此時會再...