结构体内存对齐

匿名 (未验证) 提交于 2019-12-03 00:22:01

结构体内存对齐

//

例如:

①:我们先定义一个结构体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 a8

12%8!=0,412+4%8==0

16

文章来源: 结构体内存对齐
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!