关注公号【开发小鸽】,获取海量计算机视觉与深度学习资源,实战项目源码,最新论文下载,大厂面试经验!!!
一. 结构体的内存对齐:
结构体可以存储不同类型的数据,每种数据所占的字节数都不同。而结构体是按照最大字节数来存储的,若结构体中最大的数据类型占8个字节,则结构体存储的内存中按8个字节为一格存储,将其他较少字节数的数据往里填,若有空余,则看下一个数据能否填入;若不能,则按照内存对齐原则,从下一格重新开始填入数据,空余的内存则被跳过。
二. 设置结构体如下:
struct stus{
char *p; //4
char arr[2]; //1*2
int c; //4
short d; //2
double f; //8
long g; //4
float h[2]; //4*2
};
若不调整结构体中数据存储顺序,则按最大数据类型8个字节为一格,依次填入,如下图
红色圈为空余的内存
计算得到结构体整体内存占40个字节
若将结构体中数据类型从大到小排列:
struct stus{
double f; //8
float h[2]; //4*2
long g; //4
int c; //4
char *p; //4
short d; //2
char arr[2]; //1*2
};
调整后结构体整体内存占32个字节
结论:
内存空余的情况得到了优化。但是打乱结构体的排列顺序也可能导致阅读结构体的思维混乱,所以需要平衡这两者。
关注公号【开发小鸽】,获取海量计算机视觉与深度学习资源,实战项目源码,最新论文下载,大厂面试经验!!!