Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42500
  • 博文数量: 2
  • 博客积分: 1838
  • 博客等级: 上尉
  • 技术积分: 56
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-14 10:03
文章分类
文章存档

2011年(2)

分类:

2011-02-13 20:30:59

处女贴,试贴。

常见的结构体对齐操作,例如,把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,计算对齐值,然后通过右移再左移把相应的部份屏蔽掉。其思路与前面相同。


阅读(1990) | 评论(2) | 转发(3) |
0

上一篇:没有了

下一篇:igb驱动Bug

给主人留下些什么吧!~~

joepayne2013-04-14 13:45:08

独孤兄,请教一下。如果对齐的基数不是4的整数倍,假如是5,好像不能使这种&~的方法来对齐了?我现在正好要用到对齐,考虑了一下你的方法,似乎不妥。不知道独孤兄还有没有更巧妙的方法?我不想用好几行代码来做这个工作。^_^

joepayne2013-04-09 11:46:36

先赞一下,学到了一个对齐的简便方法。嘿嘿