1. 程式人生 > 實用技巧 >每日一練0810--結構體記憶體對齊

每日一練0810--結構體記憶體對齊

每日一練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在記憶體中的結構圖為: