C語言中行內函數的作用
阿新 • • 發佈:2018-11-01
分類: C/C++
2012-06-05 20:37:52
C語言中行內函數到底有什麼作用?
試想一下,每當我們在假設就在主函式中呼叫另外一個函式的時候,那麼這個函式就要入棧或者出棧,比如說下面的一個例子:
點選(此處)摺疊或開啟
- Void myprint()
- {
- Printf("%d",3);
- }
- Void main()
- {
- Int
- For(i=0;i<100;i++)
- Myprint(2);
- }
在主函式中呼叫myprin()函式列印2這個數字,那麼我們就要呼叫函式100次,意味著這個函式要進棧100次,出棧100次,這樣一來我們就列印一個小小的2就把大量的時間花費在進棧和出棧之上了,當我們把程式改為如下所示的時候呢:
點選(此處)摺疊或開啟
- Void main()
- {
- Int i;
- For
- Void myprint()
- {
- Printf("%d",3);
- }
- }
- 此時相當於
- static inline void myprint(int n);
- static inline void myprint(int n)
- {
- printf("%d",n);
- }
- void main()
- {
- int i;
- for(i=0;i<100;i++)
- myprint(3);
- }
此時我們就不需要進棧出棧了,直接列印2就可以了,當然無論任何事,得到了一定的方便之後就必須得付出一定的代價,即此時的空間的問題。打個比方,現在我們要去一個超市買東西,而超市距離我們家有好幾里路,此時你要話費一定的時間在去超市的路上,可是現在呢超市已經搬到家裡了,我們就沒有必要去超市了,因為超市已經在家裡了,當然你的家有那麼大?能容得下一個超市?所以此時就存在一個空間的問題,即你必須擴大你家,才能夠容納的下一個超市。
對於記憶體來說也是一樣的,減少了對棧的進出時間的開銷,我們卻擴大了主存的空間來容納本來在棧裡的函式,在C語言中實現這一功能是用行內函數inline來實現的。
這就是inline函式的作用!