曲径通幽论坛

标题: 分配对齐的空间| ALIGN [打印本页]

作者: beyes    时间: 2011-5-12 17:16
标题: 分配对齐的空间| ALIGN
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 的整数倍




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2