編寫高效代碼(7) 減少函數調用——不要老打斷我

來源:互聯網
上載者:User

        函數是結構化程式設計的產物,它使代碼更加模組化,耦合性更低,重用性更高。不過,函數調用會帶來額外的開銷,除了引起跳轉外,還會產生額外的指令。

        人都有這樣的經驗,做一件事情時,如果被人打斷,重新再回來做這件事情,就需要一段恢復,如果老是被打斷,那事情就沒法做了。函數調用也是這樣,要進行參數壓棧出棧、寄存器儲存、指令跳轉等。多個步驟如果程式的效能要求較高,就可以將一些小的函數直接轉換成代碼。

1.將小函數直接寫成語句

        下面這個求最小值的函數,可以直接用函數的內容替換函數調用。 

[cpp]
view plaincopyprint?
  1. int min(int a, int b)  
  2.   
  3. {  
  4.   
  5.    return  a<b? a: b;  
  6.   
  7. }  
  8.   
  9. c = min(a, b);  
  10.   
  11. //直接寫為
      
  12.   
  13. 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?
  1. #define min(a,b) ((a)<(b)) ? (a) : (b)
      
  2.   
  3. c = min(a,b);  
#define min(a,b) ((a)<(b)) ? (a) : (b)c = min(a,b);

 

3.將函式宣告為內嵌函式

        如果嫌改為宏的方法太麻煩,還有一種簡單的方法,就是將函式宣告為inline,編譯器會自動用函數體覆蓋函數調用。 

[cpp]
view plaincopyprint?
  1. inline int min(int a, int b)  
  2.   
  3. {  
  4.   
  5.    return  a<b? a: b;  
  6.   
  7. }  
  8.   
  9. c = min(a, b);  
  10.   
  11. //編譯器會將代碼最佳化成
      
  12.   
  13. 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.