內(nèi)存對齊的三個規(guī)則:
1. 結(jié)構(gòu)體變量的起始地址能夠被最寬的成員大小整除
2. 結(jié)構(gòu)體的每個成員相對于起始的地址的偏移量能夠被其自身的大小整除 如果不能則在前一個成員的后面補充字節(jié)
3. 結(jié)構(gòu)體的總體大小能夠被最寬的成員大小整除如果不能則在后面補充字節(jié)
例子:
struct E1
{
? int a;?
char b;
char c;
}
如果E1 的首地址是0x00且int a 字節(jié)占4個字節(jié) 則占用地址為0~3 那么char b 從0x04開始项秉,能夠整除1? 下面char c被放入了0x05 可是這個地址不能夠被4個字節(jié)的int a整除 所以應該補充到8 所以這個結(jié)構(gòu)體是8