LCC的字節對齊 宏

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

    }

}

發佈了52 篇原創文章 · 獲贊 5 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章