美文网首页
内存对齐原理

内存对齐原理

作者: 枫叶知秋 | 来源:发表于2019-12-22 21:39 被阅读0次

内存对齐原则

  • 1.结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要,从该成员的大小或成员的子成员大小(数组、结构体)的整数倍开始(如int为4字节,则要从4的整数倍地址开始存储)
  • 2.结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部 最大元素 大小的整数倍地址开始存储.(struct b,b里有char(1字节),int(4字节) ,double(8字节)等元素,那b应该从8的整数倍开始存储.)
  • 3.收尾工作: 结构体的总大小,也就是sizeof的结果,.必须是其内部最大
    成员的整数倍.不足的要补⻬
  • 类的底层是结构体,类中的属性对象内存优化会使用到《二进制重排》。
  • 内存排布遵循min算法。

二进制重排:是将内存中具有相同功能的内存空间,提出来重新放入新的内存中,提高代码的执行效率。


例1:

struct LGStruct1 {
    char a;     //  1 字节   占0的位置
//根据min算法和内存对齐原则 排布
    double b;   //   8 字节,1 ~7都不是8 的倍数,第8位是8的倍数,占位为 8~15
    int c;      // 4字节,第16的位置是4的倍数,占位为16~19
    short d;    // 2字节,第20的位置是2的倍数,占位为20~21
                    //  最后,根据对齐原则第3条,内存大小必须是最大内存的整数倍 ,所以为 24
} MyStruct1;
NSLog(@"%lu",sizeof(MyStruct1));

例2:

struct LGStruct2 {
    double b;   // 8字节  占位为 0~7
//根据min算法和内存对齐原则 排布
    char a;     // 1字节  第8的位置是1的倍数,占8的位置
    int c;      // 4字节 第9~11的位置不是4的倍数,第12的位置是4的倍数,占位为12~15
    short d;    // 2字节 第16的位置是2的倍数,占位为16~17
                      //  最后,根据对齐原则第3条,内存大小必须是最大内存的整数倍 ,所以为 24
} MyStruct2;

例4:

struct LGStruct3 {
    double b;   // 8字节  占位为 0~7
    int c;      //4字节 第8的位置是4的倍数,占位为8~11
    char a;     // 1字节 第12的位置是2的倍数,占位为12
    short d;    // 2字节 第13的位置不是2的倍数,第14的位置是2的倍数,占位为14~15
                // 最后,根据对齐原则第3条,内存大小必须是最大内存的整数倍 ,所以为16

} MyStruct3;

总结:

  • 第一个数据成员放在offset为0的地方,
    *第二个之后的成员,根据当前成员的倍数进行补齐。
    *最后,根据结构体大小 必须是其内部最大成员的整数倍进行补⻬。

相关文章

  • iOS内存对齐

    这篇文章我们来探索一下iOS内存对齐的原理,在探索完内存对齐原理之后,你就会明白内存对齐的好处。 在讲述内存对齐时...

  • OC底层原理 05: 内存对齐原理

    主动已经是我对热爱东西表达的极限了 通过对结构体内存是如何对齐的?打开内存对齐原理的大门。 在探究内存对齐之前,先...

  • 内存对齐原理

    前言: 通过一段代码来说明一下内存对齐的现象: 打印结果为:24---16-- 为什么相同的结构体,只是交换了变量...

  • 内存对齐原理

    内存对齐之前需要掌握的一张图 内存对齐的目的 对于程序而言,一个变量的数据存储范围是在一个寻址步长范围内的话,这样...

  • 内存对齐原理

    内存对齐原则 1.结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方...

  • OC底层原理汇总

    OC底层原理(一).alloc实际调用流程分析OC底层原理(二).内存分配与内存对齐OC底层原理(三)、isa、对...

  • iOS--OC底层原理文章汇总

    OC底层原理01—alloc + init + new原理OC底层原理02—内存对齐OC底层原理03— isa探究...

  • 了解内存对齐原理

    对象的内存空间 首先创建一个Person类 实例化一个Person对象 调试对象地址的信息 我们可以正常输出字符串...

  • iOS 内存对齐原理

    计算机中内存空间是按照 byte 划分的,计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首...

  • iOS 内存对齐原理

    获取内存大小 第一种:sizeof The sizeof keyword gives the amount of ...

网友评论

      本文标题:内存对齐原理

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