首页 > 编程知识 正文

一字节对齐和四字节对齐,什么是字节对齐,为什么需要字节对齐

时间:2023-05-05 13:40:28 阅读:263844 作者:1035

参考博文:参考1 、参考2、参考3

在内存管理中经常使用字节对齐来管理分配的内存。
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、算法
2.1

unsigned int calc_align(unsigned int n,unsigned align){ if ( n / align * align == n)return n; return (n / align + 1) * align;}

2.2 更好的算法

unsigned int calc_align(unsigned int n,unsigned align){ return ((n + align - 1) & (~(align - 1)));}

3、算法说明

(1) (align - 1):表示对齐所需的对齐位,如:

2字节对齐位为1;4字节对齐位为11;8字节对齐位111;16字节对齐位为1111;…

(2) (n + align - 1):表示n补齐对齐所需数据。
(3) &(~(align - 1)):表示去除由于补齐造成的多余数据。
(4) (n + align - 1) & (~(align - 1)):表示对齐后的数据。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。