内存对齐
1、什么是内存对齐
- 现代计算机中内存空间都是按照 byte 划分的
- 理论上讲似乎对任何类型的变量的访问可以从任何地址开始,实际的计算机系统对基本类型数据在内存中存放的位置有限制
- 会要求这些数据的首地址的值是某个数k(通常它为4或8)的倍数,这就是所谓的内存对齐
2、为什么要进行内存对齐
处理器在取数据时一次性就能将数据读出来了,而且不需要做额外的操作,提高了效率。
说一说你理解的内存对齐以及原因
- 分配内存的顺序是按照声明的顺序
- 每个变量相对于起始位置的偏移量必须是该变量类型大小的整数倍,不是整数倍空出内存,直到偏移量是整数倍为止。
- 最后整个结构体的大小必须是里面变量类型最大值的整数倍。
添加了#pragma pack(n)后规则
- 偏移量要是n和当前变量大小中较小值的整数倍
- 整体大小要是n和最大变量大小中较小值的整数倍
- n值必须为1,2,4,8…,为其他值时就按照默认的分配规则