結構體大小計算中的記憶體對齊

2021-10-01 04:30:54 字數 507 閱讀 1971

結構體內存對齊規則:

第乙個成員在與結構體變數偏移量為0的位址處

其他成員要對齊到對齊數的整數倍的位址處

對齊數 = 編譯器預設的乙個對齊數與該成員大小的較小值

預設對齊數vs = 8;linux = 4;

結構體總大小為最大對齊數的整數倍

如果巢狀了結構體,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含有巢狀結構體的對齊數的整數倍)

例如:

struct

修改預設對齊數:#pragma pack(8) //設定預設對齊數為8

結構體大小計算(記憶體對齊問題和修改預設對齊數)

結構體中如何計算結構體大小呢?那麼首先應該理解並掌握結構體的對齊規則,為什麼陣列中不需要對齊有人會問,這是因為陣列中放入的是同型別的資料,比如字串陣列,字元陣列,指標陣列,數值陣列等。而結構體中存放的是不同型別的資料,比如結構體成員列表可為陣列,指標,整型,字元型,浮點型等組合。總體來說結構體的記憶...

結構體大小計算

c語言 結構體大小計算 個人標籤啥東東封尾機 參考 一 結構體變數中成員的偏移量必須是成員大小的整數倍 0被認為是任何數的整數倍 eg typedef struct stu4 stu4 typedef struct stu5 stu4 這兩個結構體大小都為8 已驗證 二 結構體大小必須是所有成員大小...

結構體大小計算

結構體中的成員可以是不同的資料型別,成員按照定義時的順序依次儲存在連續的記憶體空間。和陣列不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到系統在儲存結構體變數時的位址對齊問題。看下面這樣的乙個結構體 struct stu1 先介紹乙個相關的概念 偏移量。偏移量指的是結構體變數中成員的位...