ios-日常开发-通过了解结构体内存布局优化项目内存使用

281 阅读1分钟

我们可以先来看看几个结构体的例子,来了解结构体的内存布局方式。

1. 例子代码如下:

typedef struct test_t{
bool v1; //1
bool v2; //1
double v3; //8
double v4; //8
}test_t;

通过sizeof关键字获取到变量所占的内存大小,可以得出结构体变量在内存中占用24个字节;如果我们稍微做一些调整会怎么样呢?

2. 例子代码如下:

typedef struct test_t{
bool v1; //1
double v3; //8
bool v2; //1
double v4; //8
}test_t;

此时结构体变量所占用的内存是32,仅仅调整了成员变量的顺序内存的占用差距怎么会这么大呢?

2. 结构体内存布局规则

  1. 结构体中成员的起始地址的必须是其自身大小的整数倍;
  2. 结构体变量的内存大小按照其最大成员变量的内存值做对齐。

因此由于第一条原则的原因,成员变量的顺序不同将影响结构体变量所占有的内存大小,所以我们在开发中最好成员变量由小到大的方式进行编写。