5 5結構體的對齊訪問

2021-10-24 19:17:36 字數 455 閱讀 7531

(1)上一節講過結構體中元素的訪問其實本質上還是用指標方式,結合這個元素在整個結構體中的偏移量和這個元素的型別來進行訪問的。

(2)但是實際上結構體的元素的偏移量比我們上一節講的還要複雜,因為結構體要考慮元素的對齊訪問,所以每個元素實際佔的位元組數和自己本身的型別所佔的位元組數不一定完全一樣。(譬如char c實際佔位元組數可能是1,也可以是2,也可能是3,也可能是4)

(3)一般來說,我們用.的方式來訪問結構體元素時,我們是不用考慮結構體的元素對齊的。因為編譯器會幫我們處理這個細節。但是因為c語言本身是很底層的語言,而且做嵌入式開發經常需要從記憶體角度,以指標方式來處理結構體及其中的元素,因此還是需要掌握結構體對齊規則。

#include

struct s

{

char c;

//c實際佔4個位元組,而不是1個位元組

int b

結構體的對齊訪問

結構體的對齊訪問 1 結構體中元素的訪問其實本質還是用指標方式,結合這個元素在整個結構體中的偏移量和這個元素的型別來進行訪問的。2 每個元素實際佔的位元組數和自己本身的型別所佔的位元組數不一定完全一樣。譬如char c實際佔位元組數可能是1,也可能是 2,也可能是3,也可能是4 3 一般來說,我們用...

結構體的對齊

個人理解,如有誤,請指正。一 結構體內成員的的對齊 成員的位址要按照成員的大小來對齊 比如int 型別的資料的位址要按照sizeof int 對齊 比如 typedef struct s s sizeof s 8 除了要考慮結構體內成員的位址對齊 還要考慮結構體自身的對齊,原因就是因為當多個結構體成...

結構體對齊

現在去掉第乙個成員變數為如下 pragma pack 4 class testc int nsize sizeof testc 按照正常的填充方式nsize的結果應該是8,為什麼結果顯示nsize為6呢?事實上,很多人對 pragma pack的理解是錯誤的。pragma pack規定的對齊長度,實...