#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,複雜型別中各個成員按照它們被宣告的順序在記憶體中順序儲存,第乙個成員的位址和整個型別的位...