C語言 結構對齊

字節對齊一直困擾着我,具體爲什麼需要字節對齊也不是特別清楚,貌似是因爲什麼CPU的讀取相關的問題導致的。


我最近研究了一下,發現一個非常簡單的對齊計算方式。


假設其實地址是0,那麼以後的每個變量的開始地址必須是其自身的長度的整數倍,還有,爲了保證結構體中套用結構體的方式,所以結構體本身的長度需要是其最長元素的整數倍。


struct A

{

short a;

int b;

short c;

double d;

char e;

};


A::a 佔用2個字節,總字節數爲2

A::b 佔用4個字節,總字節數不夠4的整數倍,需要補齊2個字節,總字節數爲4+4=8

A::c 佔用2個字節,總字節數爲10

A::d 佔用8個字節,總字節數不夠8的整數倍,需要補齊6個字節,總字節數爲16+8=24

A::e佔用1個字節,總字節數爲25

A中最長的變量字節數爲8,總字節數不夠8的整數倍,需要補齊7個字節,總字節數爲32


struct B

{

struct A a;

char b;

};


B::a 佔用32個字節,總字節數爲32

B::b 佔用1個字節,總字節數爲33

B中最長的變量字節數爲8,總字節數不夠8的整數倍,需要補齊7個字節,總字節數爲40


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章