Optimizing C and C++ code for Embedded System !! Episode 3 (Thai Language)


Written by :  Ataya P
Date :
30 June 2007
Language : Thai

     มาแล้วครับ !!! สดๆร้อนๆกับการปรับแต่งโค้ดภาษา C  และ C++ สำหรับระบสมองกลฝัตัว Episode 3 คราวนี้คงำให้โปรแกมของใครๆหายๆคนแรงข้นได้อย่าพอสมควร ผมเองก็ได้แต่หวังใจว่าบทความที่เขียนไปนี้จะทำให้ผู้ที่สนใจได้รับความรู้เกี่ยวกับการปรับแต่งซอร์สโค้ดไปใช้งานได้จริงๆไม่มากก็น้อย( อนึง เนื่องจากผมเองก็ไม่ได้เก่งภาษาอังกฤษอะไรมากมาย เวลที่แปลเว็ของฝรั่งมเป็นเป็นภษาไทยก็อาจะเข้าใจผดไปบ้าง ถ้มีท่านผูู้้เห็นจุดิดใดๆก็ช่ยแจ้งมาด้ยนะครับ)  ;p



-> Prefer int over char and short
     
สำหรับภาษา C และ C++ นั้นควรใ้ตัวแปรทีเป็นชนิด int  มากกว่า char หรือ short เนื่องด้วยเหตุผลที่ว่าเมื่อเวลาทำการคอมไพล์แล้วนั้นคอมไพล์เลอร์จะทำการเปลี่ยน char เป็น int ก่อนสำหรับการทำ Arithmetic operation(+,-,*,/,....) และการทำ Parameter passing  ถึงแม้ว่าตัวแปรที่เราอยากจะใช้งานจะไม่มีความจำเป็นต้องมีขนาดใหญ่เท่า int (แค่ byte เดียวก็เพียงพอ)จึงต้งการจะใช้ัวแปรเป็น char แทน แต่ท้าที่สุดแล้เวลาประมวผลก็ต้องเียเวลามาเลี่ยนเป็น int อยู่ดี ดังั้นเราควระใช้ตัวแป int  จนกว่าจำเป็นจะต้องใช้ char หรือ short ในการ storage

       char sum_char(char a,char b)                                                 int  sum_int(int a,int b)
       {   char c;                                                                                        {      int c;
             c=a+b;                                                       ====>                              c=a+b;
             return c;                                                                                             return c;
       }                                                                                                          }



-> Define  lightweight constructors
        เราควรจะกำหนดให้ constructor มีขนาดเล็กที่สุดเท่าที่จะทำได้ เพราะการสร้าง Object ทุกครั้จะต้องเกียวข้องกับ construcor ทุกครั้ง การทำการปรับแต่ง constructor จะทำให้ได้การทำงานที่เร็วขึ้นมากทีเดียว


-> Prefer initialization over assigment
        เราควรทำการ initial ค่าให้กบตัวแปรมากว่าการ assign ค่าในภายหลัง 
         
        void foo( )                                                                   void  foo_optimize( )
       {   complex c;                                                              {
            c=(complex) 5;      ;     ;     ;     ;    ======>              ;      complex c=5;
     ;   }                                             ;     ;     ;     ;     ;     ;     ;     ;  }
       


->Use constructor initialization list
    ควรใช้  constructor initialization list ในการ initial  ตัวแปร การทำ assignment ไว้ใน constructor body จะทำให้ปะสิทธิภาพดลง
   
     Employee :: Employee(string name,string desig)                     Employee :: Employee(string  name,string desig) :     ;     ;     ;    
     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ;     ; m_name(name),m_desig(desig)
                                                     
     {     m_name = name;                                ======>                {
            m_desig=desig;                                                                 }
      }


-> In-line 1 to 3 line functions
     ควรขยาย function ขนาดเล็ก( 1,3 บรรทัด)ให้ป็น function แบบ In-line(เขียนโคดตรงๆไม่ตองเรียกฟัก์ชัน)เพื่อขจัด overhead ของการ call function และ parameter ที่ต้องส่งผ่าน อย่างรก็ดีการใ้วิธี  in-line function นี้กับฟังก์ชันอื่นๆที่มีขนาดใหญ่อาจให้ผลที่เป็นลบมากกว่า นื่องจากกรเพิ่มขึ้ของโด้ด

      int func(int y)                                                                                                             int func(int y)
     {                                                                                                                                    {  int temp=0;
          return pred(y)+pred(0)+pred(y+1);                                 ======>                                 if(y==0) temp+=0; else temp+y;   
     }                               ;            ;            ;            ;            ;            ;            ;            ;            ;            :         
                                                                                                                                                  :
      ;            ;            ;            ;            ;            ;            ;            ;            ;            ;            ;            ;        return    temp;
              ;            ;            ;            ;            ;            ;            ;            ;            ;            ;            ;      }  





Custom Search