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