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;