结构体的对齐规则:
1.第一个成员在与结构体变量偏移量为0的地址处。
2.其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
对齐数=编译器默认的一个对齐数与该成员大小的较小值。
注意:VS中默认的值为8
3.结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
4.如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
5.自定义对齐数:#pragma pack (n):n为你想要的对齐字节数。
例题讲解(必看):
例一:
在VS2013下,默认对齐数为8字节,这个结构体所占的空间大小是( )字节
A.16 B.9 C.12 D.8
typedef struct{
int a;
char b;
short c;
short d;
}AA_t;
答案:C
讲解:
注意:左边数字为偏移量
例二:
在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是( )
A.8 15 B.8 16 C. 7 16 D.7 15
struct A
{
int e;
char f;
};
struct B
{
int a;
short b;
char c;
struct A d;
};
答案:B
讲解: