2010年1月30日 星期六

錙銖必較

在學校好像很少被要求程式應該怎麼寫


程式怎麼寫才會比較精簡


根據上一篇的學習


我把我寫的程式寄給了面試官


沒想到得到了更多的回應


面試官除了指出我的問題點以外


還要我試著比較二者的差異性


前者是我精簡後的結果


後者是面試官給我的參考答案


為了方便比較,我這裡使用了macro的方式,方便比較二者的差異性


#define test_1
//***************************************************************//
//
// 利用陣列與指標的方式
//
//***************************************************************//

#if defined test_1


 int posi; 
 int str_test(char *ptr1,char c);


 int main(void){


  char test_a[]="Rock Solid, Heart Touching.";
  posi=str_test(test_a,'o');


     return 0;
 }
 
 int str_test(char *ptr1,char c){
  int i=0;
  while(ptr1[i] != 0x00){
   if (ptr1[i]==c){return i;}
   i++;
  }
  return -1;
 }


//***************************************************************//
//
// 比較str_test的執行效率,要60個指令時間
//
//***************************************************************//



//***************************************************************//
//
// 比較這裡的code size 要261
//
//***************************************************************//



//***************************************************************//
//
// 利用純指標的方式
//
//***************************************************************//

#elif defined test_2


 int posi; 
 int find_char( char* str, char target);   // 實作這個函式
 
 int main(void){
     char* str = "Rock Solid, Heart Touching.";
  posi=find_char( str, 'o');


     return 0;
 }
 
 int find_char(char* str, char target){
     int result = 0;
     while ( *str != '\0'){
         if ( *str == target){
             return result;
         }
         result++;
         str++;
     }
     return -1;
 }


//***************************************************************//
//
// 比較find_char的執行效率,只要55個指令時間,快了5個指令時間
//
//***************************************************************//



//***************************************************************//
//
// 比較這裡的code size 只要255,少了6個指令空間
//
//***************************************************************//



嗯,看起來程式技術不只關系了code size,也關系著執行速度


愈來愈期待我的面試結果了


學弟說我遇到的面試官是一個會移動的compiler


假如可以錄取的話,應該可以在裡面學到更多才是


2 則留言:

  1. 祝您順利得到工作!
    [版主回覆02/03/2010 00:34:32]只有應徵而已,一個星期了,還沒收到錄取通知,也還不知道上了沒有。
    所以有可能還要找新的工作。

    回覆刪除
  2. C語言寫法及效能差異
    這是我的舊文章,貼在我的部落格給您參考一下。

    回覆刪除