独孤九贱
全部博文(2)
2011年(2)
yanwei_3
善地可期
linuxDOS
auro
ocean_sh
cncqpans
linux330
crowsy00
火鸡
if21
feijch
zhainx
天马行空
15591337
animalin
sanxiao2
分类:
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,计算对齐值,然后通过右移再左移把相应的部份屏蔽掉。其思路与前面相同。
上一篇:没有了
下一篇:igb驱动Bug
joepayne2013-04-14 13:45:08
独孤兄,请教一下。如果对齐的基数不是4的整数倍,假如是5,好像不能使这种&~的方法来对齐了?我现在正好要用到对齐,考虑了一下你的方法,似乎不妥。不知道独孤兄还有没有更巧妙的方法?我不想用好几行代码来做这个工作。^_^
joepayne2013-04-09 11:46:36
先赞一下,学到了一个对齐的简便方法。嘿嘿
登录 注册