字节对齐

来源:互联网 发布:西安 国际程序员节 编辑:程序博客网 时间:2024/06/05 03:56
在内存管理中经常使用字节对齐来分配内存,有关字节对齐的算法如下:
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次方)
...
由此可见,我们只要对数据补齐对齐所需最少数据,然后将补齐位置0就可以实现对齐计算。
 
2 字节对齐实现:
#define ROUND_UP(x, align) (x+(align-1))&~(align-1)
align为2,2字节对齐
align为4,4字节对齐
align为8,8字节对齐
...
 
3 字节对齐算法:
(1)(align-1),表示对齐所需的对齐位,如:2字节对齐为1,4字节为11,8字节为111,16字节为1111...
(2)(x+(align-1)),表示x补齐对齐所需数据
(3)&~(align-1),表示去除由于补齐造成的多余数据
(4) (x+(align-1))&~(align-1),表示对齐后的数据
原创粉丝点击