现代计算机中的内存空间按字节划分. 从理论上讲,访问任何类型的变量似乎都可以从任何地址开始,但是实际情况是,访问特定变量时,通常是在特定的内存地址访问,这要求将各种类型的数据安排在其中. 按照某些规则排列空间,而不是一个接一个地排列.
为什么要地址对齐?
对齐的作用和原因: 每个硬件平台处理存储空间的方式都非常不同. 某些平台只能从某些地址访问某些类型的数据. 其他平台可能没有这些限制,但最常见的是,如果数据存储未根据平台的要求进行对齐,则会导致访问效率下降. 例如,某些平台每次都从偶数地址开始. 如果将int类型(假定为32位)存储在偶数地址的开头,则可以在一个时钟周期内读取它. 并且,如果将其存储在奇数地址的开头,则可能需要2个时钟周期,并且两次读取结果的高字节和低字节会拼凑在一起以获得int类型数据. 显然,读取效率下降很多. 这也是时空的游戏.
对齐的实现
通常,当我们编写程序时,我们不需要考虑对齐问题. 编译器将为我们选择适合目标平台的对齐策略. 当然,我们也可以通知编译器传递预编译的指令,以更改指定数据的对齐方式.
但是,这是因为我们通常不需要关心这个问题,并且因为编译器已经对齐了数据. 但是,如果我们不了解它,我们常常会对某些问题感到困惑. 最常见的是该结构的sizeof()结果,这是意外的. 为此,我们需要了解对齐算法.