c c 結構體 記憶體對齊原則

2021-10-03 08:13:18 字數 704 閱讀 5781

原則1:資料成員對齊規則:結構的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的倍數開始(比如int在32位機為4位元組,則要從4的整數倍位址開始儲存)。

原則2:結構體的總大小,也就是sizeof的結果。必須是其內部最大成員的整數倍。不足的要補齊。

原則3:如果乙個結構裡有某些結構體成員,則結構體成員要從其內部最大元素大小的整數倍位址開始儲存。

(struct a裡存有struct b,b裡有char,int,double等元素,那b應該從8的整數倍開始儲存)

原則4:對齊引數如果比結構體成員的sizeof值小,該成員的偏移量應該以此值為準。也就是說,結構體成員的偏移量應該最二者的最小值。

改變預設的對界條件(指定對界):

1,結構體成員存放的位址要能滿足整除該成員本身大小。

struct a

;//8個位元組

2,前面所有成員的大小相加應該是當前成員大小的倍數。

struct b

;//8個位元組

3,整個結構體的大小應該是單個最大成員的倍數。

struct c

;//12個位元組(4+4+2+2)

4,結構體內有結構體

struct d

d;//8個位元組

};//12個位元組

struct e

;//0個(沒有定義變數)

};//1個位元組

C C 結構體內存對齊

c c 類 結構體內存遵循三個原則 c 中結構跟類幾乎相同,除了預設成員的訪問控制不同。以下結構體的記憶體對齊在類class中也是一樣的。1 結構體變數的首位址能夠被其最寬基本型別成員的大小所整除 2 結構體每個成員相對於結構體首位址的偏移量 offset 都是成員自身大小的整數倍,如有需要編譯器會...

C C 結構體內存對齊

c c 類 結構體內存遵循三個原則 c 中結構跟類幾乎相同,除了預設成員的訪問控制不同。以下結構體的記憶體對齊在類class中也是一樣的。結構體變數的首位址能夠被其最寬基本型別成員的大小所整除 結構體每個成員相對於結構體首位址的偏移量 offset 都是成員自身大小的整數倍,如有需要編譯器會在成員之...

c c 結構體內存對齊

以上輸出的結果並非實際成員占用的位元組數,這就是結構體的記憶體對齊!1.平台原因 移植原因 不是所有的硬體平台都能訪問任意位址上的任意資料 某些硬體平台只能在某些特定位址處取某些特定的資料,否則就會丟擲硬體異常 也就是說在計算機在記憶體讀取資料時,只能在規定的位址處讀資料,而不是記憶體中任意位址都是...