2010年4月18日 星期日

call by value, call by address, call by reference 執行速度

論文程式優化研究中,死馬當活馬醫了

首先來複習一下三者的用法

//call by value
int main(){
  int a = 10;
  plus(a);
}
int plus(int a){
  //兩個a位於不同記憶體空間
  return a++;
}

//call by address
int main(){
  int a = 10;
  plus(&a); // a = 11
}
void plus(int* a){
  //傳入a的記憶體位置,function中的a pointer指向main中的a變數
  (*a)++;
}

//call by reference
int main(){
  int a = 10;
  plus(a); // a = 11;
}
void plus(int &a){
  //作用與call by address相同,寫法更簡潔 C++ only
  a++;
}
整理到的資料顯示:
Reference (address) > Value
call by value 是速度最慢的,call by ref與 call by addr意思差不多,速度似乎也差不多? call by value慢是因為它必須先 copy一份再傳給被呼叫者

看來先把程式中函式呼叫call by value的部分先改掉試試看

沒有留言: