假设一个cpu一次只从内存中读取8个字节,那么cpu的只能读取0,8,16,24,...,倘若有一个结构体这么定义:
struct x {
int x;
double y;
};
结构体内存结构如下:
此时,若想读取 y 值,则cpu必须读取两次内存:第一次读取字节0-8,第二次读取字节9-16,然后将字节4-12组合成一个double
类型,性能较低 。但如果采用下边的分配方法,只需读取一次即可(字节8-20),其中字节4-8是多余的,牺牲内存换来执行效率。
这些工作都是操作系统来处理,我们只需了解即可,一般来说,基础数据类型的字节数多大,其地址就必须是该字节数的整数倍。