// 用於字節對齊
// 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;
}
}