内存对齐

       变量的存储不是简单的堆砌,而是要按照一定的规则对齐。

Example:

 


 

内存对齐的优势在于:

            为了提高程序的性能,数据结构(尤其是栈)应该尽可能地在自然边界上对齐。为了访问未对齐的内存,处理器需要作两次内存访问;然而,对齐的内存访问仅需要一次访问。

 

内存对齐的规则是:

 

1)结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2)结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);
3)结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。
 
 

基于上面代码的例子:

st_1的char占了1个Byte, int在剩下的三个Byte中放不下,就得放在下一个四字节中,short继续往后放,剩了2个Byte的内存空间,因此占用12 Byte。

st_2的short占2个Byte,char占一个Byte而short剩下了2个Byte,可以装下,int就放在下一个4字节中,因此占用了8 Byte。

 

 posted on 2011-09-08 19:36  Jiang, X.  阅读(192)  评论(0编辑  收藏  举报