詳解4位元組對齊

2021-08-09 22:32:02 字數 838 閱讀 2078

什麼是4位元組對齊?4位元組對齊有什麼好處,有什麼壞處?分析一波。

首先先定義乙個結構體。

typedef

struct aa aa;

aa aa;

32位處理器,如果沒有採用4位元組對齊,首先結構體變數aa存放在記憶體中的起始位址為0x00,那麼其成員變數a的起始位址為0x00,成員變數b的起始位址為0x01,結構體變數aa一共占用了5個位元組。當cpu要對成員變數a進行訪問時,只需要乙個讀週期即可。而如若要對成員變數b進行訪問,首先cpu用了1個讀週期從0x00-0x03位址讀取4個位元組,然後將0x01-0x03位址的3個位元組暫存,接著又花費了1個讀週期讀取了從0x04-0x07位址的4個位元組資料,將0x04這個位址取得的位元組與上乙個週期暫存的3個位元組進行拼接從而讀取到成員變數b的值。為讀取這個成員變數b,cpu花費2個週期。

如果資料成員b的起始位址被放在了0x04處,那麼讀取其所花費的週期就變成了1,4位元組對齊效率提高了,但同時也浪費了0x01-0x03位址上的3個位元組的空間。

有3個重要的概念:自身對齊值,指定對齊值和有效對齊值。

1. 自身對齊值:即資料型別的自身的對齊值。

對於32位處理器,char型的資料,其自身對齊值為1位元組;short型的資料,其自身對齊值為2位元組;int型別,其自身對齊值為4位元組;struct和class型別的資料其自身對齊值為其成員變數中自身對齊值最大的那個值。

2. 指定對齊值:指定的對齊值,比如指定4位元組對齊。

3. 有效對齊值:上述兩個對齊值中最小的那個。

上面的例子,sizeof(aa) = 1(char) + 3個空閒空間 + 4(int) + 2(short) + 2個空閒空間。

詳解4位元組對齊

摘要 編譯器通常採用的預設位元組對齊規則 對於型別t,在n bit系統中,保證變數首位址在min sizeof t n 8 位元組位置上,以保證最少讀週期。以下為原文 其實我也是一條分割線 所謂的位元組對齊,就是各種型別的資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這個就是對齊。我...

詳解4位元組對齊

摘要 編譯器通常採用的預設位元組對齊規則 對於型別t,在n bit系統中,保證變數首位址在min sizeof t n 8 位元組位置上,以保證最少讀週期。以下為原文 其實我也是一條分割線 所謂的位元組對齊,就是各種型別的資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這個就是對齊。我...

位元組對齊 8位元組對齊

參考博文 參考1 參考2 參考3 在記憶體管理中經常使用位元組對齊來管理分配的記憶體。1 原理 2 演算法 2.1unsigned intcalc align unsigned int n,unsigned align 2.2 更好的演算法 unsigned intcalc align unsign...