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