1. 程式人生 > >關於記憶體對齊

關於記憶體對齊

記憶體對齊可以用一句話來概括:“資料項只能儲存在地址是資料項大小的整數倍的記憶體位置上”
例如int型別佔用4個位元組,地址只能在0,4,8等位置上。

位元組對齊的緣故,如下的結構體的佔用記憶體是一樣
struct A{
        char a;  // 1byte  實際佔用 4 byte
        int b;  //4byte 實際佔用 4 byte
        char c;  // 1byte  實際佔用 4 byte
        long long d;  // 8byte  實際佔用 8 byte
};

sizeof(A) = 16

struct B{
        char a;  // 1byte  實際佔用 1 byte
        char c;  // 1byte  實際佔用 1 byte
        char e:4;  // 4bit
        char f:2;  // 2byit
        char g:2;  // 2bit  e f g 合起來實際佔用 1 byte
        int b;  //4byte 實際佔用 4 byte
        long long d;  // 8byte  實際佔用 8 byte
};

sizeof(B) = 16

 

#pragma pack()可以指定對齊塊大小