函數是結構化程式設計的產物,它使代碼更加模組化,耦合性更低,重用性更高。不過,函數調用會帶來額外的開銷,除了引起跳轉外,還會產生額外的指令。
人都有這樣的經驗,做一件事情時,如果被人打斷,重新再回來做這件事情,就需要一段恢復,如果老是被打斷,那事情就沒法做了。函數調用也是這樣,要進行參數壓棧出棧、寄存器儲存、指令跳轉等。多個步驟如果程式的效能要求較高,就可以將一些小的函數直接轉換成代碼。
1.將小函數直接寫成語句
下面這個求最小值的函數,可以直接用函數的內容替換函數調用。
[cpp]
view plaincopyprint?
- int min(int a, int b)
-
- {
-
- return a<b? a: b;
-
- }
-
- c = min(a, b);
-
- //直接寫為
-
- c = a<b? a: b;
int min(int a, int b){ return a<b? a: b;}c = min(a, b);//直接寫為c = a<b? a: b;
2.將小函數寫成宏
如果調用的地方很多,用函數調用的方式會顯得代碼簡潔。一種即保持代碼簡潔又能減少函數調用的做法是將函數體聲明為宏。
[cpp]
view plaincopyprint?
- #define min(a,b) ((a)<(b)) ? (a) : (b)
-
- c = min(a,b);
#define min(a,b) ((a)<(b)) ? (a) : (b)c = min(a,b);
3.將函式宣告為內嵌函式
如果嫌改為宏的方法太麻煩,還有一種簡單的方法,就是將函式宣告為inline,編譯器會自動用函數體覆蓋函數調用。
[cpp]
view plaincopyprint?
- inline int min(int a, int b)
-
- {
-
- return a<b? a: b;
-
- }
-
- c = min(a, b);
-
- //編譯器會將代碼最佳化成
-
- c = a<b? a: b;
inline int min(int a, int b){ return a<b? a: b;}c = min(a, b);//編譯器會將代碼最佳化成c = a<b? a: b;
本文節選自《大話處理器》第6章。
一台電腦要真正做到優秀,它的硬體和軟體是必須緊密聯絡在一起的。——喬布斯
來源:http://blog.csdn.net/muxiqingyang/article/details/7043476