分享

字节对齐、8字节对齐

 袁先森lemon 2021-10-01

参考博文:参考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)):表示对齐后的数据。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多