Chinaunix首页 | 论坛 | 博客
  • 博客访问: 575541
  • 博文数量: 108
  • 博客积分: 46
  • 博客等级: 民兵
  • 技术积分: 1279
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-16 11:36
个人简介

坐井以观天

文章分类

全部博文(108)

文章存档

2014年(13)

2013年(90)

2012年(6)

分类:

2013-04-09 11:43:05

原文地址:对齐的计算 作者:独孤九贱

处女贴,试贴。

常见的结构体对齐操作,例如,把n以4对齐,可以这样做:

 

x = n + (4 - 1)

if(x 大于4的倍数)

 减去超过的值;


所以减的值可能是从0,1,2,3。这样做太麻烦,可以使用位运算&~来解决这个问题:

 

#define _INTSIZEOF(n) \
  ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1))

这样,将溢出的部份屏蔽掉。类似的做法还有:


numentries += (1UL << (20 - PAGE_SHIFT)) - 1;
  numentries >>= 20 - PAGE_SHIFT;
  numentries <<= 20 - PAGE_SHIFT;

通过+= n - 1,计算对齐值,然后通过右移再左移把相应的部份屏蔽掉。其思路与前面相同。


阅读(753) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~