在C语言中,我们的类型有两种一种是内置类型,另一种是自定义类型,今天我们来看一下自定义类型占用字节数的计算
首先我们知道自定义类型中包含一些内置类型,其中内置类型的大小我们是知道的,那么自定义类型的大小是不是里面内置类型直接加起来呢?
我们来看一下
首先我们要知道,自定义类型的大小不是按照里面包含的内置类型的大小加起来的
我们可以看到,结构体的大小计算是存在内存对齐的,其中像上图说明的一样,我们一条一条来看
首先该结构体中a应该放在该结构体内存存放位置的0字节位置,所以直接放在前四个字节,然后下面是char类型,但是从第二个变量开始就需要放在对齐数的整数倍处,而因为是char类型又因为char类型的对齐数是1,而4是1的倍数所以,刚好可以,而下面是short类型,对齐数是2所以需要放在2的倍数处,这里橙色的是被浪费掉的空间,所以这里也开始放两个字节,而下面的同样是short类型而8刚好是2的整数倍,所以不需要额外浪费空间,在放两个字节,而结构体的最终大小并不是这样就结束了,而最终大小是该结构体中成员的最大的对齐数,的整数倍所以最终该结构体的大小为12个字节
下面我们在看几个结构体(老铁们自己对照观看)
这两个也是同样如此
我们介绍一下下面的一个
我们介绍一下这个,我们可以看到这个结构体中包含另外一个结构体,而结构体的基本类型和其他的结构体计算大小没有区别,但是里面包含的结构在对齐的时候需要找到结构体中的最大对齐数进行对齐,然后将该结构体的最终字节数给放进去,而这个结构体的最终大小同样也是按照该结构体中所有的成员里面的最大对齐数的倍数,这里面的最大对齐数包含里面结构体里面的成员。