之前我們有談過 (如何避免 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 的地方
沒有留言:
張貼留言