写在前面,本文默认以32位机标准来阐述。一个机器字长为4字节,32位。
数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍。int数据(4字节)的内存起始地址能被4除尽,short数据(2字节)数据的内存起始地址能被2除尽。
x86 CPU能直接访问对齐的数据,当它试图访问一个未对齐的数据时,会在内部进行一系列的调整。这些调整对于程序来说是透明的,但是会降低运行速度,所以编译器
在编译程序时会尽量保证数据对齐。
引用书上的例子:
#include <stdio.h>
int main()
{
int a;
char b;
int c;
printf("0x%08x",&a);
printf("0x%08x",&b);
printf("0x%08x",&c);
return 0;
}
用VC编译后执行的结果:
0x0012ff7c a
0x0012ff7b b
0x0012ff80 c
变量在内存中的顺序:b(1字节)————a(4字节)————c(4字节)