MEM_ROUND_UP(x):将x(指针类型或者整形)向上调整为_ALLOC_ALIGN_SIZE的整数倍。
#define MEM_ROUND_UP(x) ROUND_UP(x, _ALLOC_ALIGN_SIZE)
#define ROUND_UP(x, align) (((int) (x) + (align - 1)) & ~(align - 1))
其实调整方法很简单,如x=5,align=4;
align-1=3;
~(align-1)=0xFC,既11111100
看出来了吧,能被4整出的数末两位必须是00,然后通过&运算,保证其它位的数不变。通过+(align-1)保证向上调整。这种调整方式
只对2的n此方的数有效,而内存对齐边界一般都为2的n次方。
那么,宏ROUND_DOWN(x,align)大家已经猜出来了吧:
#define MEM_ROUND_DOWN(x) ROUND_DOWN(x, _ALLOC_ALIGN_SIZE)
#define ROUND_DOWN(x, align) ((int)(x) & ~(align - 1))
另外,这两个宏的运算结果都为int型,注意转换。