美文网首页
扩展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—关于内存对齐的原则

    本文为L_Ares个人写作,包括图片皆为个人亲自操作,以任何形式转载请表明原文出处。 在扩展1[https://w...

  • 2.iOS底层学习之内存对齐

    学习了内存对齐之后的疑问?? 1.为啥要内存对齐?2.内存对齐的规则?3.内存对齐实例分析。 内存对齐的目的 上网...

  • 结构体内存对齐

    对象内存对齐 探讨的问题 1.什么是内存对齐?2.为什么要做内存对齐?3.结构体内存对齐规则4.源码内存对齐算法 ...

  • 内存对齐原则

    导引 首先看一个例子: 从图中看出,打印结果不同,这是为什么呢? 基础知识(arm64) char 1字节; s...

  • iOS 开发 内存对齐(练习)

    目录 内存对齐规则 对齐系数 面试题演练 一、内存对齐规则 (关于面试题中结构体内存对齐计算总结) 1.1、数据成...

  • 内存对齐的原则

    1、数据成员对齐规则:结构(struct)或union的数据成员,第一个数据的成员,放在offset为0 的地方,...

  • iOS底层探索-calloc

    一、calloc底层探索 1.1、内存对齐原则 a:数据成员对齐规则:结构(struct)(或联合(union))...

  • iOS底层探究 - 内存对齐

    目录1:内存对齐的原因2:内存对齐的规则3:结构体内存分配演练以及在iOS中对象成员的内存分配探索 一 :内存对齐...

  • iOS 内存对齐

    一、结构体内存对齐 1.1 结构体内存对齐三大原则 数据成员对⻬规则结构体(struct)或联合体(union)的...

  • iOS结构体内存对齐原则初探

    为什么OC对象在开辟内存的时候会有内存对齐原则,在对象申请内存的时候是16字节对齐的,在真正开辟所需要的内存时时8...

网友评论

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

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