关于内存对齐

内存对齐可以用一句话来概括:“数据项只能存储在地址是数据项大小的整数倍的内存位置上”
例如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()可以指定对齐块大小

猜你喜欢

转载自blog.csdn.net/poject/article/details/83859934
今日推荐