自定义结构体通常有多种不同类型的变量
struct a
{
int n;
char c;
float f;
}
如上结构体a中有四个字节大小的整形n,也有一个字节的字符c等,结构体存储并不是简单的将这些变量紧挨着存在一起
其中存在一个概念:对齐数
这个数在不同的环境中不同,在vs2022中这个数默认是8,而每一个结构体成员的对齐数就是这个成员自身大小和默认对齐数中较小的那个。比如成员n自身大小是4,而默认对齐数是8,取其较小值,所以n的对齐数是4。
知道了每个成员的对齐数,那这个对齐数要咋用嘞。
struct a
{
int n;//4
char c;//1
float f;//4
}
结构体的第一个成员放在结构体存放位置的零偏移位置处。
从第二个成员开始每个成员存放在位于自身对齐数的整数倍偏移量处
结构体的大小必须是所有成员里最大对齐数的整数倍
如果结构体成员中嵌套有结构体,那属于成员的结构体要对齐到自身成员中最大对齐数的整数倍处,那么这个结构体大小要是,所有成员(包括嵌套结构体中的成员)中最大对齐数的整数倍
上面的结构体a的大小是12