内存对齐的原理
由于CPU在读取和计算数据时,需要根据CPU和操作系统的位数来一次性读取一定大小的数据。目前大部分CPU都支持64位,操作系统大部分都使用32位或64位,我们以64位操作系统为例进行说明。64位CPU和操作系统一次可以处理8字节数据,对于一个结构体如果结构体中的数据大小为8个字节,本来CPU可以一次读取完毕,由于读取的地址在结构体中可能不是从首地址开始的,这就会导致这个8位数据被CPU读取了两次才读取完毕,很明显这样的CPU工作效率近乎降低了一半,为了改善这种情况,引入了内存对齐机制,用来提高CPU的工作效率和减少对内存的浪费。
结构体内存大小计算方法
方法:
1.首先找到结构体中占用字节数最大的类型(X个字节)。那么我们将以X字节数大小为单位来进行计算。想象出一个矩阵,每一行有X个字节,共有多行。
2.将第一个类型字节占用情况放到X的首位。将第二个类型字节数接着放入行中,前面的总长度应为自己长度的倍数,从而来平移当前字节数的位置。
3.以此类推来放置字节,当需要放置的类型已经无法放入该行,则从第二行开始放置。假设放置了N行。
4.最终我们计算出占用字节长度为X*N。
我们对3道例题进行分析
例1:struct {
char a;
short b;
short c;
char d;
char e;
char f;
}
1.最大类型为short为2字节,所以每行有2个字节大小。
2.char a占用第一行的首字节,剩余1字节。
3.short b占用2字节,第一