两个问题:1.为什么需要内存对齐?2.对齐的原则是什么?
针对Question1
ANS:内存对齐是为了提高效率,以32位计算机为例,CPU读取一次数据,是读32位,也就是4字节对齐,因此如果一个int型数据是按照4字节对齐来存储的,则取数据的时候就会一次取出,但如果存储的数据中有int、char、short,却没有按照4字节对齐则取出的int型可能就会跨越32位,这个时候CPU还会按照32位读,但一次就会读不完全一个int型,这个时候就需要读取两次,也就浪费了时间
针对Question2
ANS:对齐原则:
a.结构体内成员按自身长度自对齐,自对齐,指的就是该成员的其实地址必须是它自身长度的整数倍
b.结构体的总大小为结构体的有效对齐值的整数倍,有效对齐值,1.以结构体中最长的成员的长度为其有效值
2.当用#pragmatic(n)指定时,以n和结构体中最长的成员的长度中较小者为有效对齐值
3.当用_attribute_((n))指定长度时,强制按照此值为结构体的有效对齐值