一、什么是字节对齐?
计算机中的数据在存储时并不是按顺序存储,因为在访问特定的数据类型时通常从特定的内存地址开始,所以数据在存储时特定的类型存储时从特定的地址开始,比如我们所说的int类型的对齐数是4,意思是存储这个int类型的变量的地址%4==0,这就是对齐数为4的意思。
二、为什么要字节对齐?
字节对齐是的思想就是以空间换取时间。所以在存储数据时采取字节对齐的方式,可以让cpu在访存读取数据时的效率大大提高。如果数据在存储时是按照顺序的方式来存储的,比如说有些机器在访存时每次都是从偶地址开始的,如果我们要访问一个int型的数据,我们采用字节对齐的方式话,在32位的系统下我们通过一次访存就可以读出这个数据,如果没有字节对齐,那么当这个整形数的起始地址是个奇地址时,我们要访存两次才可以完整的读出这个数据,并且在读出后还要通过拼接才能拿到这个整形数,相对而言我们采用字节对齐的方式的效率高。
三、如何正确的理解数据存储的地址?
在VC6.0下我们写出这样一个程序
#include<stdio.h>
int main()
{
char b=0;
int a=0;
printf("%p\n",&b);
printf("%p\n",&a);
return 0;
}