结构体内存对齐
一、结构体怎么对齐?
1、先计算每个成员变量的对齐数。
对齐数 = 操作系统的默认的对齐数与各个成员变量数据类型大小的较小者
例:int类型大小为4字节,而64位操作系统对齐数就是8字节,(4<8)那int类型对齐数就定为4字节。
2、成员变量要对齐到自身对齐数的整数倍的地址处。
例:int类型变量的对齐数为4,那int类型将放置的地址只能是4的整数倍,比如放在0、4、8、12依次延伸。
3、最后结构体的总大小必须是结构体成员中最大对齐数的整数倍。
4、如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍
举例说明:
struct S1
{
char a;
int b;
char c;
}
此时sizeof(struct S1)等于12

struct S2
{
char a;
char b;
int c;
}
此时sizeof(struct S2)等于8

二、为什么要进行结构体对齐?

三、如何安排变量可以让结构统占用内存大小更小?
将对齐系数小的字段,尽可能放在一起,尽量减少空白填充。
四、关键点
内存对齐其实就是典型的空间换时间的方式,来达到优化的目的。
浙公网安备 33010602011771号