每日一練0810--結構體記憶體對齊
阿新 • • 發佈:2020-08-10
每日一練0810--結構體記憶體對齊
typedef struct bb { int id; double weight; float height; }BB; typedef struct aa { char name[2]; int id; short score; short grade; BB b; }AA;
這兩個結構體 分別佔用多大的記憶體,為什麼?
結構體BB佔24個位元組,結構體AA佔12個位元組。因為結構記憶體對齊原則,結構體的總大小,為其成員中所含最大型別的整數倍。
結構體BB中,最大的資料型別是double 8個位元組,變數id 為int 型別佔4個位元組,但weight為double型別佔8個位元組,8+4>8,所以id佔8個位元組的記憶體大小,weight佔8個位元組的記憶體大小,height佔8個位元組的記憶體大小,所以結構體BB總共佔24個位元組,BB在記憶體中的結構圖為:
結構體AA的最大資料型別為結構體b的最大資料型別,即b中的變數weight的大小8個位元組,所以AA的記憶體大小是8的整數倍。變數name佔2個位元組,id 佔4個位元組,score佔2個位元組,所以前3個變數佔8個位元組,grade佔8個位元組,結構體b佔24個位元組,所以結構體AA佔40位元組。AA在記憶體中的結構圖為: