主要是因為對齊。每種型別分配到的記憶體地址需要按照一定的大小來進行對齊,整個結構體也是需要對齊的。比如說`double`一般是8byte對齊,那麼一個double的起始地址就必須是被8整除的。
參考:
Data structure alignment
物件 - cppreference.com
--------------------------------------------------
原來的分佈:
char a: 1 byte, space:3 byte, int b:4 byte,
char c:1 byte, space: 7 byte,
double d: 8 byte
----------------------------------------------------
去掉`char a`的分佈:
int b:4 byte, char c:1 byte, space: 3 byte,
說明對齊的一段程式碼:
執行結果是: 1 4 1 8 8。不同的平臺也許會不同
主要是因為對齊。每種型別分配到的記憶體地址需要按照一定的大小來進行對齊,整個結構體也是需要對齊的。比如說`double`一般是8byte對齊,那麼一個double的起始地址就必須是被8整除的。
參考:
Data structure alignment
物件 - cppreference.com
--------------------------------------------------
原來的分佈:
char a: 1 byte, space:3 byte, int b:4 byte,
char c:1 byte, space: 7 byte,
double d: 8 byte
----------------------------------------------------
去掉`char a`的分佈:
int b:4 byte, char c:1 byte, space: 3 byte,
double d: 8 byte
----------------------------------------------------
說明對齊的一段程式碼:
執行結果是: 1 4 1 8 8。不同的平臺也許會不同