1. 程式人生 > >C語言中行內函數的作用

C語言中行內函數的作用

C語言中行內函數的作用

 

分類: C/C++

2012-06-05 20:37:52

 

C語言中行內函數到底有什麼作用?

試想一下,每當我們在假設就在主函式中呼叫另外一個函式的時候,那麼這個函式就要入棧或者出棧,比如說下面的一個例子:


 

點選(此處)摺疊或開啟

  1. Void myprint()
  2.  
  3. {
  4.  
  5. Printf("%d",3);
  6.  
  7. }
  8.  
  9. Void main()
  10.  
  11. {
  12.  
  13. Int
     i;
  14.  
  15. For(i=0;i<100;i++)
  16.  
  17. Myprint(2);
  18.  
  19. }


 

在主函式中呼叫myprin()函式列印2這個數字,那麼我們就要呼叫函式100次,意味著這個函式要進棧100次,出棧100次,這樣一來我們就列印一個小小的2就把大量的時間花費在進棧和出棧之上了,當我們把程式改為如下所示的時候呢:


 

點選(此處)摺疊或開啟

  1. Void main()
  2. {
  3.     Int i;
  4.     For
    (i=0;i<100;i++)
  5.     Void myprint()
  6.     {
  7.     Printf("%d",3);
  8.     }
  9. }
  10. 此時相當於
  11. static inline void myprint(int n);
  12. static inline void myprint(int n)
  13. {
  14.     printf("%d",n);
  15. }
  16. void main()
  17. {
  18.   int i;
  19.   for(i=0;i<100;i++)
  20.     myprint(3);
  21.  
  22. }

此時我們就不需要進棧出棧了,直接列印2就可以了,當然無論任何事,得到了一定的方便之後就必須得付出一定的代價,即此時的空間的問題。打個比方,現在我們要去一個超市買東西,而超市距離我們家有好幾里路,此時你要話費一定的時間在去超市的路上,可是現在呢超市已經搬到家裡了,我們就沒有必要去超市了,因為超市已經在家裡了,當然你的家有那麼大?能容得下一個超市?所以此時就存在一個空間的問題,即你必須擴大你家,才能夠容納的下一個超市。

對於記憶體來說也是一樣的,減少了對棧的進出時間的開銷,我們卻擴大了主存的空間來容納本來在棧裡的函式,在C語言中實現這一功能是用行內函數inline來實現的。

這就是inline函式的作用!