iOS 结构体内存对齐

2020-09-08  本文已影响0人  天清水蓝
struct LGStruct1 {
    double a;   // 8 (0-7)
    char b;     // 1 [8 1] (8)
    int c;      // 4 [9 4] 9 10 11 (12 13 14 15)
    short d;    // 2 [16 2] (16 17)
}struct1;

// 内部需要的大小为: 17
// 最大属性 : 8
// 结构体整数倍: 24
// 结构体嵌套结构体 : 作业
//

// 15 -> 16

struct LGStruct2 {
    double a;   //8 (0-7)
    int b;      //4 (8 9 10 11)
    char c;     //1 (12)
    short d;    //2 13 (14 15) - 16
}struct2;
// 15 -> 16

//原则1:结构体内变量存储的开始位置应该是变量所占字节的整数倍(第一个变量从0开始),如不是,跳至整数倍开始存
//原则2:结构体嵌套结构体的话,第二个结构体应该从8的倍数开始存储
//原则3:结构体大小最终应该为其内部最大变量(内部基础变量)的整数倍
struct LGStruct3 {
    double a;          //8    [0-7]
    int b;             //4    [8 4] 8 9 10 11
    struct LGStruct2 m;//16   [16 16] 16 17 ... 31
    char c;            //1    [32 1]  32
    short d;           //2    [34 2] 34 35
    //因为结构体为8的整数倍,所以最终结果为40
}struct3;
上一篇下一篇

猜你喜欢

热点阅读