这个是非常常见的,笔试面试都很容易被问到,这里总结一下。
结构体各成员变量存放的起始地址相对于结构的起始地址的偏移量必须为该变量的类型所占用的字节数的倍数。空缺的字节自动填充。同时为了确保结构的大小为结构的字节边界数(即该结构中占用最大空间的类型所占用的字节数)的倍数,所以在为最后一个成员变量申请空间后,还会根据需要自动填充空缺的字节。
typedef
struct A
{
char a;
char a1[102];
}A;
//103字节,最后结构体整体按sizeof(char)对齐
typedef struct C
{
char a;
short b;
//起始地址要2的倍数
char c;
char d;
}C;
//6字节,最后按short对齐
typedef struct B
{
char a;
double i;
//起始地址8倍数
short b;
}B;
//24字节