下述的程式段,主要是以全域變數的矩陣變數作為說明。全域變數會消耗記憶體RAM,宣告越多消耗越多,若是宣告較大的矩陣空間,消耗十分驚人。(副程式是作為節省記憶體ROM所用)


 


以程式範例來做說明 :


void sub_1(void) ;       // 宣告副程式


 


int var1[5]={1,2,3,4,5};  // 宣告全域變數,並定義初始值


 


// 矩陣變數進、出副程式


int main(void)


{ 


   sub_1( ) ;            // 代入副程式


   sub_1( ) ;            // 代入副程式


   sub_1( ) ;            // 代入副程式


   while(1);


} 


 


// 將重複的程式段,以副程式包起。(節省記憶體)


void sub_1(void)  


{


   int i;


   for(i=0;i<5;i++){


      var1[i] *= 2;


      var1[i] += 1;


      var1[i] *= 4;


   }


}




下述程式段是以區域矩陣變數來取代全域矩陣變數,即可節省記憶體RAM :


1.    區域變數不會消耗記憶體RAM


需求 : 為了同時節省記憶體RAMROM


1.  使用區域變數


2.  使用副程式化


問題 :


1. 區域矩陣變數無法直接代入副程式運算後代出。


原因 :


1.    區域變數在離開副程式後即會將位址歸還。


解決方法 :


1.  將區域變數以指標形態做宣告,將變數位址化。


2.  進入副程式時只需要將位址代入,即可在原先的區域變數位址上進行運算。


 


改善後的程式段 :


 


void sub_1(int *Inv) ;       // 宣告副程式


 


int main(void)


{


   int var[5]={1,2,3,4,5};      // 宣告矩陣變數


   int *p = &var[0];         // 定義指標變數


  


   sub_1(p) ;                // 將指標位址代入副程式中


   sub_1(p) ;                //


   sub_1(p) ;                //


            


   while(1);


} 


 


void sub_1(int *Inv)


{


   int i;


   for(i=0;i<5;i++)


      *(Inv+i) = *(Inv+i) * 10;


}


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jk3527101 的頭像
    jk3527101

    簡單也是另一種快樂

    jk3527101 發表在 痞客邦 留言(1) 人氣()