内存对齐原理

2019-12-22  本文已影响0人  枫叶知秋

内存对齐原则

  • 类的底层是结构体,类中的属性对象内存优化会使用到《二进制重排》。
  • 内存排布遵循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;

总结:

上一篇 下一篇

猜你喜欢

热点阅读