取内存对齐的宏如下:
#define WORDSIZE 4
#define SKB_DATA_ALIGN(X) (((X) + (WORDSIZE - 1)) & \
~(WORDSIZE - 1))
理解:
当WORDSIZE为4时,可以简化为:
int tmp1=X + 3 ;
int tmp2=~(3);
int tmp3= tmp1 & tmp2;
需要注意的是tmp2 的计算结果:
3转换为4位的二进制为 0011,取非运算得到 1100
如果X 为2,2+3=0010+0011= 0101,与1100 按位与,得到0100,转为十进制为4;
如果X为5,5+3=0101+0011=1000, 与 1100 按位与,得到1000,转为十进制为8;
为什么可以这样计算呢,还没搞明白,以后搞明白后补充。