系原创,转载时请帖上地址:http://blog.youkuaiyun.com/qq51931373/article/details/45843975
什么叫内存字节对齐:就是在内存地址中按照一个规则(这个规则具体是什么在下面说)把一个变量放在它应该在的内存地址,而不是把变量从前到后一个紧挨着一个存放(那是 在理想状态下存在的,而理想和现实是有差距的,呵呵)。
为什么要字节对齐 :CPU从数据总线中读取内存中的数据,而CPU一次性从内存中读取多少位的数据是由数据总线的位数来决定的,拿i386处理器来说,它的数据总线是32位,也就决定了i386的处理器一次性是从内存中读取32位的数据(也就是4个字节)。如果在内存中的变量在存放的时候没有严格按照规则(下面会讲) 被存放到一个它应该在的内存地址,就会导致读取一个变量的值到CPU时,会读取多次,这就导致了效率上的下降,由于CPU的速度比内存的速度快很多倍,所以CPU从内存中读一次 和 从内存中读两次 从CPU的角度来说这个效率的下降是不可以接受的.而为什么没有对齐的话则会读两次甚至三次,请阅读这篇客:http://blog.youkuaiyun.com/qq51931373/article/details/45846001
以下介绍基本数据类型变量 结构体 类对象的字节对齐规则:
在介绍规则之前先明确以下概念:
1. 基本数据类型变量的自身对齐值 = sizeof(type) ,如int 类型变量的内存对齐值就是4。如果int a[10] 则变量a的自身对齐值仍然是sizeof(int),而不是sizeof