系统相关
首页 > 系统相关> > iOS之内存管理-字节对齐

iOS之内存管理-字节对齐

作者:互联网

字节对齐

 1 struct Mystruct1{
 2     char a;     //1字节
 3     double b;   //8字节
 4     int c;      //4字节
 5     short d;    //2字节
 6 }Mystruct1;
 7 
 8 struct Mystruct2{
 9     double b;   //8字节
10     int c;      //4字节
11     short d;    //2字节
12     char a;     //1字节
13 }Mystruct2;
14 
15 struct Mystruct3{
16     double b;   //8字节
17     int c;      //4字节
18     short d;    //2字节
19     char a;     //1字节
20     struct Mystruct1 e;
21 }Mystruct3;
22 
23 //计算 结构体占用的内存大小
24 NSLog(@"%lu----%lu----%lu",sizeof(Mystruct1),sizeof(Mystruct2),sizeof(Mystruct3));
25 
26 打印结果为:24----16----40

 

Mystruct1 与 Mystruct2 数据成员的顺序不同,为什么会导致内存分配的大小不同呢?

 

1. 字节对齐的原则

1.1 结构体或者联合体的数据成员,第一个成员的存储位置从0开始,之后的每个成员的存储起始位置均为该成员的大小的整数倍。

1.2 结构体的总大小(sizeof的结果),必须是其内部最大成员的整数倍,不足的需要补齐

1.3 如果结构体或者联合体的数据成员中存在子结构体,则子结构体的存储起始位置为其内部最大成员的整数倍。

2. 内存优化方案:属性重排

由上面的栗子可以知道,结构体的数据成员顺序会影响结构体类型占用的内存大小。

由此苹果中采用属性重排的方案。苹果会自动重排属性的顺序,将占用不足 8 字节的成员挨在一起,凑满 8 字节,以达到优化内存的目的。

 

下面举个栗子

标签:字节,16,成员,iOS,内存大小,对齐,整数倍
来源: https://www.cnblogs.com/mysweetAngleBaby/p/15317694.html