欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

字节对齐、8字节对齐

程序员文章站 2024-03-14 11:37:22
...

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

相关标签: 基础知识