// 用于字节对齐
// A:x+(n-1) 当x、n是正整数时,表达式的值永远是大于n的。
// 当1 =< x =< n 时 n =< x+(n-1) < 2n-1 可以认为 n =< x+(n-1) <= 2n
// 当n+1 < x =< 2n 时 2n < x+(n-1) =< 3n
// 当2n+1 < x =< 3n 时 3n < x+(n-1) =< 4n
// ~B:~(n-1) 当n是2~i次方(i=1,2,3,4),表达式的值永远是n的倍数。 可以通过列出各个位来看,最小的、有值
// 的位大小是n的倍数,小于n的部分都是0
// A & ~B 取各种情况下A的左值
// 两个表达式求& x经过第一个表达式将自己变成大两种情况:1.x<=n 整个表达式 n; 2. x>n
#define roundup(x,n) (((x)+((n)-1))&(~((n)-1)))
直接用代码解释就是
// Function: unsigned long ByteAlign(unsigned long in_uiRequest, unsigned long in_uiAlign,
// unsigned long& out_uiAlignedRequest)
// Decription: 将需要的内存变大小修改成符合字节对齐的大小
// In:
// in_uiRequest: 实际需要的内存
// !只能是正整数
// in_uiAlign: 对齐标准
// !2的i次方 i = 1, 2, 3```
// out:
// out_uiAlignRequest: 符合对齐标的准需求大小
// Algorithm:
// 对齐算法如下:返回值一定是对齐标准的整数倍,当需求大小不是对齐标准整数倍时,用分配(倍数+1)*对齐标准 个字节
bool ByteAlign(unsigned long in_uiRequest, unsigned long in_uiAlign,
unsigned long& out_uiAlignedRequest)
{
if(uiRequest != 0)
{
unsigned long = uiN;
uiN = in_uiRequest / in_uiAlign;
if(in_uiRequest % in_uiAlign)
{
out_uiAlignedRequest = ((uiN+1) * uiAlign)
}
else
{
out_uiAlignedRequest = uiN * uiAlign
}
}
else
{
return false;
}
}