為什么內存對齊計算機平臺往往為了提高內存萃取效率,往往對數據進行對齊存放,如果不對數據存放進行對齊,會在存取效率上帶來損失。比如有些平臺每次讀都是從偶地址開始,如果一個int型(假設為32位系統)如果存放在偶地址開始的地方,那 么一個讀周期就可以讀出這32bit,而如果存放在奇地址開始的地方,就需要2個讀周期,并對兩次讀出的結果的高低字節進行拼湊才能得到該32bit數據。顯然在讀取效率上下降很多。
內存對齊規則
① 各成員變量存放的起始地址相對于結構的起始地址的偏移量必須為該變量的類型所占用的字節數的倍數
② 保證整個結構所占字節數是為結構的字節邊界數(結構中占用最大空間的類型所占用的字節數)的整數倍:
struct mystruct{
char a; //偏移量為 0,滿足條件①,char占一個字節,
double b; //偏移量為1,不滿足條件①,填充7個0,然后偏移量滿足條件,b放在偏移量為8的位置,所占字節為8
int c;//偏移量為16,滿足條件①,放在偏移量為16的位置上,所占字節為4
//所有成員變量一共占20字節,但是不滿足②,所以填充四個0,最終所占字節數為24
};