地址对齐算法
通常在数据存储的时候,都会让地址进行对齐,有的是4字节,有的是8字节,等等。
所以就需要对地址进行对齐操作,有向上取整和向下取整两种方式。
注意:该方法仅适用于2的n次方数对齐
方法
- 向下取整:ALIGN_DOWN(x,align) (x & ~(align-1))
例如:x = 6,align = 4;即:期望对6向下取整
x = 6 == 0110b ; 4 == 0100;
结果为:0110 & ~(0011) = 0110 & 1100 = 0100 = 4;即为6按4字节向下取整的结果
即将4所在位后面都清空
- 向上取整:ALIGN_UP(x,align) ((x + (align-1)) & ~(align-1))
例如:x = 1,align = 8;即:期望对5向上取整
x = 1 == 0001b ; 8 == 1000;
x + (align-1)= 1 + 7 = 8
结果为:(0001+0111) & ~(0111) = 1000 & 1000 = 1000 = 8;即为1按8字节向上取整的结果
即将原来的值+7之后,再把末尾清空