我们可以先来看看几个结构体的例子,来了解结构体的内存布局方式。
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. 结构体内存布局规则
- 结构体中成员的起始地址的必须是其自身大小的整数倍;
- 结构体变量的内存大小按照其最大成员变量的内存值做对齐。
因此由于第一条原则的原因,成员变量的顺序不同将影响结构体变量所占有的内存大小,所以我们在开发中最好成员变量由小到大的方式进行编写。