将bytes上调至8的倍数

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=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的倍数

你可能感兴趣的:(随笔记)