将bytes上调至8的倍数

本文解析STL源码中一段用于将字节数上调至8的倍数的代码实现。通过位运算,代码高效地实现了字节对齐,适用于多种场景,如内存分配、缓存行对齐等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

STL源码剖析中有一段代码实现将bytes上调至8的倍数,借鉴了如何将一个数上调至8的倍数这篇博客

enum{__ALIGN=8};
size_t ROUND_UP(size_t bytes)
{
    return ((bytes)+__ALIGN-1)&~(__ALIGN-1));
}

这段代码可以这样理解:

首先 __ALIGN=00001000;

则__ALIGN-1=00000111;

~(__ALIGN-1)=11111000;

bytes+__ALIGN-1,如果bytes本身已经是8的倍数,低三位肯定是0, 此时低三分别+1又与0相与,结果仍是bytes本身

如果bytes不是8的倍数,则8n<bytes<8(n+1);

即bytes=8n+q;

bytes+__ALIGN-1=8(n+1)+p;   8(n+1)低三位一定是0,此时低三位代表的数就是p,与0相与消除

((bytes)+__ALIGN-1)&~(__ALIGN-1))=8(n+1);

 

同理,可以根据该式将bytes上调至2^n的倍数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值