起因:为甚么有这俩对齐
在存储的时候,为了提高效率,一般都会让偏移量落在2的m次方的位置上,而且常有向上取整和向下取整两种需求。
方法
1. 向下取整:PALIGN_DOWN(x,align) (x & ~(align-1))
例如:x = 5,align = 4;即:期望对5向下取整
x = 5 == 0101b ; 4 == 0100;
结果为:0101 & ~(0011)
= 0101 & 1100
= 0100
= 4;即为5按4字节向下取整的结果
即将4所在位后面都清空
2. 向上取整:PALIGN_UP(x,align) ((x + (align-1)) & ~(align-1))
例如:x = 5,align = 4;即:期望对5向上取整
x = 5 == 0101b ; 4 == 0100;
结果为:(0101+0011) & ~(0011)
= 1000 & 1100
= 1000
= 8;即为5按4字节向上取整的结果
即将原来的值+3之后,再把末尾清空