结构体为什么需要内存对齐?
1.第一是硬件原因,不是所有硬件都支持对任意地址的任意数据进行访问,有些平台只支持对某些地址处的特定类型数据进行访问,不然硬件就会抛异常
2.一些数据结构,尤其是栈,需要在内存自然边界上对齐。如果不对齐,处理器需要对该内存进行两次内存访问,而对齐了只需要访问一次,效率要高一些
结构体内存对齐规则
1.首先有一个概念,默认对齐数,是编译器默认的对齐数和该成员大小的较小值。vs默认是8,Linux默认没有对齐数,是的,CSND上普遍所说的Linux默认对齐数是4或8的说法全是错误的。没有默认对齐数这个知识点来源于gcc官方文档。
2.其他成员变量要对齐到某个数字的整数倍的地址处。
3.结构体总大小为最大对齐数的整数倍