結構體成員的記憶體對齊

2021-08-18 08:51:07 字數 1031 閱讀 9742

#include void printf_arr(quint8 *data, int len, quint8 base_num )

if(16 == base_num)

}printf("\n");

}struct frame_big

;struct frame_small

;struct frame_union

; union

;};int main()

; struct frame_big *pframe_big = (struct frame_big *)frame;

printf("pframe_big->said addr=%d\n", (quint32)(&pframe_big->said_u32));

printf("pframe_big->said =%x\n", pframe_big->said_u32);

struct frame_small *pframe_small = (struct frame_small *)frame;

printf("pframe_small->said addr=%d\n", (quint32)(pframe_small->said));

printf("pframe_small->said =");printf_arr(pframe_small->said,4,16);

printf("(uint32)(pframe_small->said) =0x%08x\n", *(quint32 *)pframe_small->said);

return 0;}

執行結果如下:

由frame_big可見,其成員said_u32在記憶體中並沒有緊密排列在成員stc的後面,而是都起始於4的倍數的位址2686640,stc後面空了3個位元組的空間沒有被使用。

如果結構中的所有成員,都是int8、uint8型別,那麼顯然,結構中的所有成員都是單位元組對齊的,也即所有成員都是緊密排列的

結構體成員的記憶體分布與對齊

我們先看一道 ibm和微軟的筆試題 ibm筆試題 structa structb sizeof a 6,sizeof b 8,為什麼?注 sizeof short 2,sizeof long 4 微軟筆試題 struct example1 struct example2 int main int a...

結構體對齊(記憶體對齊

有的時候,在腦海中停頓了很久的 顯而易見 的東西,其實根本上就是錯誤的。就拿下面的問題來看 structt 使用sizeof t 將得到什麼樣的答案呢?要是以前,想都不用想,在32位機中,int是4個位元組,char是1個位元組,所以t一共是5個位元組。實踐出真知,在vc6中測試了下,答案確實8個位...

記憶體對齊 結構體對齊

現在已知32位機器上各種資料型別的長度如下 char 1 有符號無符號同 short 2 有符號無符號同 int 4 有符號無符號同 long 4 有符號無符號同 float 4 double 8 重要規則 1,複雜型別中各個成員按照它們被宣告的順序在記憶體中順序儲存,第乙個成員的位址和整個型別的位...