地址对齐算法

发布时间 2024-01-12 08:46:44作者: ccc_zdh

通常在数据存储的时候,都会让地址进行对齐,有的是4字节,有的是8字节,等等。
所以就需要对地址进行对齐操作,有向上取整和向下取整两种方式。
注意:该方法仅适用于2的n次方数对齐
方法

  1. 向下取整: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所在位后面都清空

  1. 向上取整: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之后,再把末尾清空