星期二, 10月 14, 2014

盡量利用 pointer 來傳遞大 Size 的參數



之前我們有談過 (如何避免 Stack Overflow)


在函式(function) 之間傳遞的參數 (parameter ) 過大有可能造成記憶體方面的問題,
這樣的情況會導致當機很難解.


今天要談的是另外一個問題: 效能


重寫之前的範例
typedef T_ALL_NAME char[1024];


void find_name(T_ALL_NAME p1) {   //1


       /* do something */


}


void foo(void) {
   T_ALL_NAME foo_name;        //2


   find_name(foo_name);        
}


//1 使用call by value 的方式傳遞參數,
因為時代社會的進步,
可以使用的記憶體變多了
因此程式順利執行沒有造成 stack overflow 的現象


但是需要將//2 foo_name copy 一份到 p1,
如此一來增加額外的執行時間.


比較好的寫法如下
void find_name(T_ALL_NAME *p1) {   //1


       /* do something */


}


void foo(void) {
   T_ALL_NAME foo_name;        //2


   find_name(&foo_name);        
}
如此一來省下了stack 的空間,
也少了 copy 的時間,


如果擔心傳入的參數被寫壞掉的話,
可以將之宣告為 const


寫法如下
void find_name(const T_ALL_NAME *p1);   


如此一來, 編譯器(compiler) 就會去檢查,

有寫入p1 的地方

沒有留言: