ALIGN 宏定义在 linux/kernel.h 中:
[C++] 纯文本查看 复制代码 #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1)
#define __ALIGN_MASK(x,mask) (((x)+(mask))&~(mask))
它的作用是“按照 a 的整倍数来为 x" 分配空间。其中 a 应该是 8 的整数倍(8,16,32...)。比如 ALIGN(37,8) 的值为 40;ALIGN(52,16) 的值为 64 。
在 __ALIGN_MASK 中,x + mask 表示分配的空间应该是要比 x 大的,而且仅大出一个 mask ,接着再和 ~(mask) 相与是表示分配的空间对其到 a 的整数倍上,如 ALIGN(37,16) 展开后为:
(37 + 15) & ~(15)
二进制表示为:
00100101 (37)
10000 (~15) & <--- (16)
-----------------------
00100000 (48) <--- 取 16 的整数倍 |