結構體、類的成員對齊

自然對齊

爲了保證CPU的運算穩定和效率,要求基本數據類型在內存中的存儲地址必須自然對齊。所謂自然對齊,就是基本數據類型的變量不能簡單的存儲於內存中的任意地址處,它們的起始地址必須能夠被它們的大小整除。

例如,在32位平臺下,int和指針類型的變量的地址應該能夠被4整除。


結構體變量的自然對齊

對於複合類型(一般指結構體和類)的對象,如果它的起始地址能夠滿足其中要求最嚴格(最高)的那個數據成員的自然對齊要求,那麼它就是自然對齊的。

什麼是“自然對齊要求最嚴格”呢?距離來說吧,double、int、bool所佔的空間依次爲8、4、1,它們的對齊嚴格性依次降低。結構體內部成員變量的對齊方式,按照其sizeof大小最大的基本類型變量的對齊要求進行對齊。必要的時候,對象的末尾還要進行字節填充。

總結:結構體的長度一定是其最長的成員變量大小的整數倍。


例子

01	struct{         //sizeof 8,按4字節對齊,末尾填充2字節
02	    long a1;
03	    short a2;
04	}B;
05	 
06	struct STest        //sizeof 16,按8字節對齊,末尾填充7字節
07	{
08	    double b;
09	    char a;
10	};
11	 
12	struct ThreeeShort{ //sizeof 10,按2字節對齊,末尾填充1字節
13	    short a;
14	    short b;
15	    short c;
16	    short d;
17	    char ch;
18	};


發佈了12 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章