数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍。比如 dword的内存地址必须被4整除,word的内存地址必须被2整除。X86 cpu能直接访问对齐的数据,但它试图访问一组未对齐的数据时,它将对在内部进行一系列的对齐调整。这些调整对程序是透明的,但会影响运行速度,所以在编译过程中尽量保持数据对齐。同样的代码在VC,DEV C++中的编译结果。
int main()
{
int a;
char b;
int c;
printf("0x%08x",&a);
printf("0x%08x",&b);
printf("0x%08x",&c);
return 0;
}
VC:
0x0012ff7c
0x0012ff7b
0x0012ff80
变量在内存的存储顺序是:b(一字节)->a(四字节)->c(四字节)
DEV C++:
0x0022ff7c
0x0022ff7b
0x0022ff74
变量在内存的存储顺序是:c(4字节)中间相隔三字节->b(1字节)->a(4字节)
两个编译器都做到了数据对齐,但明显VC跟合理一些,节省内存。