字节对齐一直困扰着我,具体为什么需要字节对齐也不是特别清楚,貌似是因为什么CPU的读取相关的问题导致的。
我最近研究了一下,发现一个非常简单的对齐计算方式。
假设其实地址是0,那么以后的每个变量的开始地址必须是其自身的长度的整数倍,还有,为了保证结构体中套用结构体的方式,所以结构体本身的长度需要是其最长元素的整数倍。
struct A
{
short a;
int b;
short c;
double d;
char e;
};
A::a 占用2个字节,总字节数为2
A::b 占用4个字节,总字节数不够4的整数倍,需要补齐2个字节,总字节数为4+4=8
A::c 占用2个字节,总字节数为10
A::d 占用8个字节,总字节数不够8的整数倍,需要补齐6个字节,总字节数为16+8=24
A::e占用1个字节,总字节数为25
A中最长的变量字节数为8,总字节数不够8的整数倍,需要补齐7个字节,总字节数为32
struct B
{
struct A a;
char b;
};
B::a 占用32个字节,总字节数为32
B::b 占用1个字节,总字节数为33
B中最长的变量字节数为8,总字节数不够8的整数倍,需要补齐7个字节,总字节数为40