我最近正在探索 Linux 内核中的对齐机制,但是,我对两个宏感到困惑,它们是ALIGN()和round_up(),它们具有不同的实现但相同的目的(据我的理解),即 2^n 字节向上舍入.
我很好奇他们需要两个具有不同 impl 但输出相同的宏的原因。
而且,它们都在同一个头文件中,include/linux/kernel.h.
#define __round_mask(x, y) ((__typeof__(x))((y)-1))
#define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1)
#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))
#define ALIGN(x, a) __ALIGN_KERNEL((x), (a))
谢谢!