美文网首页
扩展2—关于内存对齐的原则

扩展2—关于内存对齐的原则

作者: L_Ares | 来源:发表于2020-10-19 19:16 被阅读0次

    本文为L_Ares个人写作,包括图片皆为个人亲自操作,以任何形式转载请表明原文出处。

    扩展1中,我们说到了16字节的对齐,其中说明了CPU在读取内存的时候,是以"块"为单位的,是以"块"读取的,这就利用了空间换时间的成本兑换,那么"块"就需要大小一致,才能达到方便CPU读取的目的。所以这就需要内存对齐。

    内存对齐的原则

    1. 数据成员对齐规则:结构体或者联合体(共用体),即structunion的数据成员,第一个数据成员放在offset为0的位置,以后每个数据成员存储的起始位置要从该成员大小或者该成员的子成员大小的整数倍开始存储。

    上面说的子成员,比如该成员有子成员,数组,结构体等等都是子成员。

    举例:比如结构体里面第一个是intint是4字节,第二个是char类型的数据,那么int就放在了offset=0的位置,而char则必须从4的整数倍地址的位置开始存储。

    1. 结构体成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储。

    举例:struct a里面有struct bb里面有charintdouble这3个类型的元素,那么b就必须取其中最大的double,也就是8字节的整数倍开始存储。

    1. 收尾工作:结构体的总大小,也就是sizeof的结果,必须是其内部最大成员的整数倍,不足的要补齐。

    举例:还是struct a里面有charintdouble这三个类型的元素,那么sizeof的结果,一定是double,8个字节的整数倍。因为double8字节,char1字节,int4字节,double最大,所以sizeof的结果必须是8的整数倍。

    相关文章

      网友评论

          本文标题:扩展2—关于内存对齐的原则

          本文链接:https://www.haomeiwen.com/subject/aixhmktx.html