当前位置: 首页 > news >正文

结构体内存对齐

View Post

结构体内存对齐

一、结构体怎么对齐?

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

图片

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

三、如何安排变量可以让结构统占用内存大小更小?
将对齐系数小的字段,尽可能放在一起,尽量减少空白填充。

四、关键点
内存对齐其实就是典型的空间换时间的方式,来达到优化的目的。