在内存管理中经常使用字节对齐来管理分配的内存。 1、原理
2字节对齐:要求地址位为2, 4, 6, 8…,地址的二进制最后一位为0(2的1次方)。 4字节对齐:要求地址位为4,8,12,16…,地址的二进制最后两位为0(2的2次方)。 8字节对齐:要求地址位为8,16,24,32…,地址的最后三位为0(2的3次方)。 16字节对齐:要求地址位为16,32,48,64…,地址的最后四位为0(2的4次方)。 … 2、向上对齐算法1:
unsigned int calc_align_up_num(unsigned int n,unsigned align)
{
if ( n / align * align == n)
return n;
return (n / align + 1) * align;
}
3、向上对齐算法2:
unsigned int calc_align_up_bit(unsigned int n,unsigned align)
{
return ((n + align - 1) & (~(align - 1)));
}
例如:选择为8位对齐 1):算法分析
2):数据代入: 4、向下对齐算法1:
unsigned int calc_align_down_num(unsigned int n,unsigned align)
{
return (n / align ) * align;
}
5、向下对齐算法2:
unsigned int calc_align_down_bit(unsigned int n,unsigned align)
{
return (n & (~(align - 1)));
}
|