c++爲什麼有inline?

一.什麼是內聯函數

內聯函數的簡單理解就是編譯的時候把函數定義替換到調用的位置,用來降低運行時間,編譯器將使用函數的定義體來替代函數調用語句,這種替代發生在編譯階段

但是內聯函數僅僅只是對於編譯器的建議,編譯器是不是採取你的建議取決於函數是不是符合內聯的有利條件,不然編譯器將忽視函數的內聯聲明.

inline int add(int a , int b )
{
	return a+b;
}
int main()
{
	int num1 = 1;
	int num2  = 2;
	int sum = add(num1, num2) ; //  其實就是 num1 + num2
}

二.內聯函數的好處?

  • 減少函數調用帶來的開銷,什麼是函數調用開銷?如果一個函數被頻繁的調用,那麼有函數不斷的入棧,函數棧,會造成棧控件的大量消耗
  • 棧控件是函數內的數據的內存空間,系統下,棧空間是有限的,函數的死循環遞歸調用的最終結果是導致棧內存空間的枯竭

三.內聯函數的編程風格

1.inline 必須與函數定義體放在一起纔可以稱爲內聯函數

		inline void Foo();
		void Foo(){
		}
		void Foo(); 可以實現
		inline void Foo(){}

inline 用於實現的關鍵字 ,而不是一種用於聲明的關鍵字,但是聲明與定義不可混爲一談,用戶也沒有必要,知道函數是不是需要內聯

2.inline 的使用有限制

  • inline只使用函數體代碼簡單的函數,不能包含太過複雜,不能是遞歸函數 ,虛調用,通過函數指針調用,使用alloca , 不然會直接拒絕優化

四.慎用內聯

可能很多同學覺得inline 這好,乾脆把所有的函數都聲明爲內聯,內聯是可以提高函數的執行的效率,內聯以代碼膨脹爲代價,省去函數調用的開銷來提高執行效率
以下情況不宜使用內聯:

(1)如果函數體內的代碼比較長,使用內聯將導致內存消耗代價較高。

(2)如果函數體內出現循環,那麼執行函數體內代碼的時間要比函數調用的開銷大。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章