内存对齐
链接:https://www.nowcoder.com/questionTerminal/68321a0b94cd4d18b4ca56a93800fa74?source=relative
来源:牛客网
来源:牛客网
内存对齐的3大规则:
- 对于结构体的各个成员,第一个成员的偏移量是0,排列在后面的成员其当前偏移量必须是当前成员类型的整数倍
- 结构体内所有数据成员各自内存对齐后,结构体本身还要进行一次内存对齐,保证整个结构体占用内存大小是结构体内最大数据成员的最小整数倍
- 如程序中有#pragma pack(n)预编译指令,则所有成员对齐以n字节为准(即偏移量是n的整数倍),不再考虑当前类型以及最大结构体内类型
- 链接:https://www.nowcoder.com/questionTerminal/68321a0b94cd4d18b4ca56a93800fa74?source=relative
![]()
位域:有些数据在存储时并不需要一个完整的字节,只需要一个或几个二进制位即可。例如开关只有通电和断电两种状态,用0或1表示足矣,也就是用一个二进制位。
char t:4,表示占4个bit位,char k:4,表示占4个bit位,共占一个字节;i的数据类型为unsigned short为2字节,则其偏移量为2的整数倍,因此需空一个字节,i占8个bit位,即1个字节;则前面数据变量共占3个字节;之后m为unsigned long为4字节,则偏移量应为4的整数倍,为4,则需空一个字节,再放m,占4个字节;最后,结构体对齐(整个结构体的总大小为最宽基本类型成员大小的整数倍)此时已有8个字节,正好为4的整数倍。
![]()
低端对齐。
![]()



浙公网安备 33010602011771号