結構體 類的成員對齊

2022-05-22 20:21:11 字數 705 閱讀 6408

自然對齊

為了保證cpu的運算穩定和效率,要求基本資料型別在記憶體中的儲存位址必須自然對齊。所謂自然對齊,就是基本資料型別的變數不能簡單的儲存於記憶體中的任意位址處,它們的起始位址必須能夠被它們的大小整除。

例如,在32位平台下,int和指標型別的變數的位址應該能夠被4整除。

結構體變數的自然對齊

對於復合型別(一般指結構體和類)的物件,如果它的起始位址能夠滿足其中要求最嚴格(最高)的那個資料成員的自然對齊要求,那麼它就是自然對齊的。

什麼是「自然對齊要求最嚴格」呢?距離來說吧,double、int、bool所佔的空間依次為8、4、1,它們的對齊嚴格性依次降低。

結構體內部成員變數的對齊方式,按照其sizeof大小最大的基本型別變數的對齊要求進行對齊。必要的時候,物件的末尾還要進行位元組填充。

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

例子

structb;

struct stest //sizeof 16,按8位元組對齊,末尾填充7位元組

;struct threeeshort;

關於結構體的成員對齊與結構體整體對齊

大多數計算機體系結構中,對記憶體操作時按整字訪問才能達到最高效率,相當於是以空間換取時間,看似浪費了記憶體空間,但換來了訪問效率,先來說說三個概念 系統對齊值,自身對齊值,有效對齊值,三個概念的單位均為位元組,一開始概念不懂沒關係,可以對照後面的程式和記憶體分布圖來理解 1,系統對齊值 對於不同的作...

結構體成員對齊的問題

現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。1 現象 比如有些平台每次讀都是從偶位址開始...

結構體中的成員對齊

關於結構體中成員對齊的總結 a.結構體中,結構體成員要對齊到其對齊值倍數的位址上,對齊值為min 成員型別對齊值,編譯器結構成員對齊值b.結構體本身的對齊值為其所有成員中最大的對齊值。c.結構體本身要對齊到其對齊值倍數的位址上。d.結構體中的結構體要對齊到其對齊值倍數的位址上。e.結構體成員在記憶體...