计算机系统对基本数据类型合法地址做出了一些限制,要求某种类型对象的地址必须是某个值K(2, 4, 8)的倍数。
这种对齐限制简化了处理器和存储器系统之间的接口的硬件设计
处理器一次从内存中读取2或4或8个字节的数据,而如果地址并不是k的倍数则处理器可能需要执行两次访问操作
其实无论数据是否对齐都能正常工作,但是数据对齐可以提高存储器性能
扩展:有些多媒体操作指令要求存储器地址必须对齐,因此确保栈帧的长度都是16字节的整数倍
而以C语言结构体为例
每次为malloc为结构分配内存时要考虑返回的指针满足机器一切字节对齐限制
一般为4或者8,而这时编译器坑你需要在字段的分配中插入间隙,常见对小于4字节的字段插入间隙
结构本身对起始地址也有一写对齐要求
例1:
struct AA {
char c;
int a;
double b;
} CC;
例2:
struct AA {
int a;
double b;
char c;
} CC;
例1会有16字节空间
例2会有24字节空间