1. 程式人生 > >C可變引數的應用和記憶體對齊

C可變引數的應用和記憶體對齊

       可變引數提供了一個引數可供多種選擇

       記憶體對齊可以最大限度保證速度,當然是在犧牲記憶體的前提下

 

     1.  szieof(char*) =4   sizeof(int)=4 實際上就是對齊了 _INTSIZEOF(n) 

      void abc(char *CanShu,...)

     {

       char * ch;

       ch=CanShu;

       va_list vt;  //typedef char *  va_list;

       va_start((vt,CanShu); //  #define va_start(ap,v)  ( ap = (va_list)&v + _INTSIZEOF(v) )

       while(ch!=NULL)

       {

             printf("%s\n",ch);
             str=va_arg(vt,char*);  //#define va_arg(ap,t)    ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
                                                   //#define va_end(ap)      ( ap = (va_list)0 )

       }

      va_end(vt);

    }  


    void main()

   {  abc("abcde","defg","hjk","fefe","we",null);} 

       


2.記憶體對齊的特點

  1.當前欄位的整數倍為起始地址  2.結構體(A)內部包含結構體(B),則B在A的起始地址為B裡面最大欄位的倍數  3.補齊。