Posted on 2007-08-10 23:14
ZelluX 阅读(309)
评论(0) 编辑 收藏 所属分类:
System
把以前跳过去的几节补一下
对齐就是指为了提高处理器的效率,把某些基础类型的地址规定为必须是某个值(通常是2,4或8)的整数倍。
如果不这样处理,例如把一个double值分开存放在地址为8*n的两边,处理器每次从内存中读取8字节,这样就需要读取两次才能得到这个double值了。
Linux的做法是把2字节数据(如short)存放在偶数的地址中,把其他更大的数据(int, int *, float, double)放在以4为约数的地址中。
Windows则使用了相对现代的处理器而言更好的做法,任何k字节的数据必须存放在以k的倍数为起始的地址中,即double必须存放在以8*n为起始的地址中。
GCC的编译开关-malign-double也可以达到这种效果,但因此可能导致与某些假定4字节对齐方式的库的链接错误。
一个简单的例子:
struct S1 {
int i;
char c;
int j;
};
对齐后的保存方式为
0-4: i
4-5: c
8-12: j