LCC的字节对齐 宏

来源:互联网 发布:滤波矩阵 编辑:程序博客网 时间:2024/06/05 20:20

// 用于字节对齐
// 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;

    }

}

原创粉丝点击