说下我的一个理解吧,仅供参考。
在计算机为结构体分配内存的时候,会选择一个模数(各种使用到的单个变量数据类型中占内存的最大值),这个就是分配内存的基数(内存的大小会是这个模数的整数倍,也就是说,要不就不分配内存,其他的变量挤一挤,要分配就分配一个模数大小的空间)。
确定这个模数之后,按照结构体成员的定义顺序 开始依次分配内存。(这些内容在视频,第12天18,中都有讲到)
对于视频中出现的问题的理解
对于结构体
struct A{
short a;//2
float c;//4
char b;//1
double d;//8
};//占24字节
struct B{
short a;//2
char b;//1
float c;//4
double d;//8
};//占16字节
我认为计算机在确定大的模数的时候,对于小于模数的数据中又会分配一个小的模数,也就是说,在这里大模是8,小模是4,往下是2和1,对于structA ,模数8,所以先分配8字节,8字节内模数是4,开始分配short,2字节没问题,但是当分配float时,就需要分配到后4个字节中了(前4个字节因此浪费2字节),这样8字节占满,再分配char类型时,会再分配8字节,浪费7个,然后再分配8字节放double。也就是说每个数据类型分配时{只会分在以自身为模的地址中},Int和float只会分配的4的倍数的地址中,short只会分配的2的倍数的地址中,char分配在1的倍数的地址中(所有地址都是),double分配在8的倍数地址中。
F:\结构体A.png
对于structB就简单了,它的存储是第一个8字节(2字节short,1字节char,空1字节,4字节float),第二个8字节(8字节的double) |