字节对齐的细节和编译器实现相关,一般而言有三个准则:
- 结构体变量的首地址能够被其最宽基本类型成员的大小所整除。
- 结构体每个成员相对于结构体首地址的偏移量都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节。
3 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。 字节对齐有助于加快计算机的取数速度,节省指令周期。对于示例结构ExS1来说,根据准则2,需要在c1和s1之间填充如一个空字节,所以整个结构的长度变为8.变化一下ExS1的成员顺序如下: struct ExS1 {
short s1;
int i1;
char c1;
};
结果总长度变为了12.根据准则2,需要在s1和i1之间加入两个空字节,根据准则3,需要在c1后加入3个空字节,最后,结构体变量的大小如下所示:2+2+4+1+3=12
|