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