正常人类算法:
unsigned int calc_align(unsigned int n,unsigned align)
{
if ( n / align * align == n)
return n;
return (n / align + 1) * align;
}
非正常人类算法:
其一:
((size) + ((~((size)&((n)-1))+1)&((n)-1)))
其二:
(size+(align-1))&~(align-1)
1,2貌似等价。
解释:
例如8字节对齐要求,后三位为0.
(align-1)表示后三位111.
size+(aling-1)会导致进位。
&~(aling-1)去除后面多余的。