posts - 403, comments - 310, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

CSAPP - Alignment

Posted on 2007-08-10 23:14 ZelluX 阅读(300) 评论(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


只有注册用户登录后才能发表评论。


网站导航: