内存对齐
假设有一个结构体如下
struct test
{
char a; //1
short b; //2
int c; //4
};
大小是1+2+4=7吗?不对,这个就是内存对齐导致的
为什么要内存对齐?
1.平台移植原因,不是所有的硬件都能访问任意地址上的数据
2.提高效率,牺牲空间,换取时间
那么如何计算该结构体大小?
拼矩形法
- 一个格子代表一个字节
- 绿色代表 数据占用的空间
- 黄色代表 编译器优化处理后,数据占用的空间
- 红色代表 编译器补齐未利用的空间
首先各自数据占用的空间如下,编译器会寻找占用空间最大的类型为基准
编译器优化后数据占用空间如下
编译器补齐未利用的空间
最后结构体实际占用空间大小为8字节,即为总共格子数
注意
结构体声明时,相邻的变量才会进行优化处理,若b、c声明时顺序调换则结果不同
struct test
{
char a; //1
int c; //4
short b; //2
};
则最终结果为
结构体大小为12