字節對齊一直困擾着我,具體爲什麼需要字節對齊也不是特別清楚,貌似是因爲什麼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