#define ROUND_UP(x, align) (((int) (x) + (align - 1)) & ~(align - 1))
#define ROUND_DOWN(x, align) ((int)(x) & ~(align - 1))
#define ALIGNED(x, align) (((int)(x) & (align - 1)) == 0)
#define MEM_ROUND_UP(x) ROUND_UP(x, _ALLOC_ALIGN_SIZE)
#define MEM_ROUND_DOWN(x) ROUND_DOWN(x, _ALLOC_ALIGN_SIZE)
#define STACK_ROUND_UP(x) ROUND_UP(x, _STACK_ALIGN_SIZE)
#define STACK_ROUND_DOWN(x) ROUND_DOWN(x, _STACK_ALIGN_SIZE)
#define MEM_ALIGNED(x) ALIGNED(x, _ALLOC_ALIGN_SIZE)
请教高手 这几个宏主要作用是什么.
------解决方案--------------------------------------------------------
主要是用于对齐.align是对齐的数值,如对齐到256字节边界(即align为1<<8,0x100).
#define ROUND_UP(x, align) (((int) (x) + (align - 1)) & ~(align - 1))
对齐到不小于x的指定的边界.因为是不小于,所以先加上比对齐边界小1的值,再进行与去掉未对齐的部分.如边界是256时,先加255,再于0xFFFFFF00进行与.
如align为256,x为256时;结果为256,x为255时,结果为256;x为257时,结果为512.
#define ROUND_DOWN(x, align) ((int)(x) & ~(align - 1))
对齐到不大于x的指定边界.
#define ALIGNED(x, align) (((int)(x) & (align - 1)) == 0)
检查是否对齐到指定的边界.
明白了这个,后面的几个就容易了.