结构体内存对齐
//
例如:
①:我们先定义一个结构体A100
a1b4A 5
如图:
:
那我们来看看结构体真正的内存申请情况:
443
①为例:
②:
①规则相同,②的结构体大小=1+1+2+4=8
结构体内存申请情况:
③:
①②规则相同,③的结构体大小=1+1+2+1+3+4 = 12
结构体内存申请情况:
④:
③的结构体大小应该=1+3+4+2 = 10
12
现在我们来看看看结构体真正的内存申请情况:
12
现在我们来考虑一下假设结构体数组的存在:
arr[1]
44
arr[1]
结构体内存申请情况,如图:
④:我们会发现结构体大小 =1+3+4+2+2 = 12
我们可以找出规律计算结构体的大小时避免出现以上问题:
==0
=0==0
不过在实际工作操作时,一般会直接在结构体上补上一个空白成员并注释。
如:
最后我们总结一下结构体内存对齐的规则:
①:每一行和前面行总和比,不能被整除,则补上。
②:算出总共大小后和单个最大比,不能被整除,则补上。
我们结束前用两个结构体来验证我们的对齐规则。
①:
①:4+8=12 int aint c412%4==0
结果正确
将上图展开,可得:
②:
①:8+4=12 double a为8
12%8!=0,412+4%8==0
16
文章来源: 结构体内存对齐