JavaShuo
欄目
標籤
C++內聯函數(C++ inline)詳解
時間 2019-11-05
標籤
c++
內聯
函數
inline
詳解
欄目
C&C++
简体版
原文
原文鏈接
使用函數可以避免將相同代碼重寫屢次的麻煩,還能減小可執行程序的體積,但也會帶來程序運行時間上的開銷。
函數調用在執行時,首先要在棧中爲形參和局部變量分配存儲空間,而後還要將實參的值複製給形參,接下來還要將函數的返回地址(該地址指明瞭函數執行結束後,程序應該回到哪裏繼續執行)放入棧中,最後才跳轉到函數內部執行。這個過程是要耗費時間的。
另外,函數執行 return 語句返回時,須要從棧中回收形參和局部變量佔用的存儲空間,而後從棧中取出返回地址,再跳轉到該地址繼續執行,這個過程也要耗費時間。
總之,使用函數調用語句和直接把函數中的代碼從新抄寫一遍相比,節省了人力,可是帶來了程序運行時間上的額外開銷。
通常狀況下,這個開銷能夠忽略不計。可是,若是一個函數內部沒有幾條語句,執行時間原本就很是短,那麼這個函數調用產生的額外開銷和函數自己執行的時間相比,就顯得不能忽略了。假如這樣的函數在一個循環中被上千萬次地執行,函數調用致使的時間開銷可能就會使得程序運行明顯變慢。
做爲特別注重程序執行效率,適合編寫底層系統軟件的高級程序設計語言,
C++
用 inline 關鍵字較好地解決了函數調用開銷的問題。
在 C++ 中,能夠在定義函數時,在返回值類型前面加上 inline 關鍵字。如:
inline
int
Max
(
int
a
,
int
b
)
{
if
(
a
>
b
)
return
a
;
return
b
;
}
增長了 inline 關鍵字的函數稱爲「內聯函數」。內聯函數和普通函數的區別在於:當編譯器處理調用內聯函數的語句時,不會將該語句編譯成函數調用的指令,而是直接將整個函數體的代碼插人調用語句處,就像整個函數體在調用處被重寫了一遍同樣。
有了內聯函數,就能像調用一個函數那樣方便地重複使用一段代碼,而不須要付出執行函數調用的額外開銷。很顯然,使用內聯函數會使最終可執行程序的體積增長。以時間換取空間,或增長空間消耗來節省時間,這是計算機學科中經常使用的方法。
內聯函數中的代碼應該只是很簡單、執行很快的幾條語句。若是一個函數較爲複雜,它執行的時間可能上萬倍於函數調用的額外開銷,那麼將其做爲內聯函數處理的結果是付出讓代碼體積增長很多的代價,卻只使速度提升了萬分之一,這顯然是不划算的。
有時函數看上去很簡單,例如只有一個包含一兩條語句的循環,但該循環的執行次數可能不少,要消耗大量時間,那麼這種狀況也不適合將其實現爲內聯函數。
另外,須要注意的是,調用內聯函數的語句前必須已經出現內聯函數的定義(即整個數體),而不能只出現內聯函數的聲明。
相關文章
1.
C++內聯函數(C++ inline)
2.
c++ inline(內聯)函數
3.
C++ 內聯函數inline
4.
C++ 內聯函數詳解
5.
《C++》-內聯函數
6.
c++內聯函數
7.
C++內聯函數
8.
C++ 內聯函數
9.
C語言.遞歸函數.回調函數.inline內聯函數
10.
內聯函數inline
更多相關文章...
•
SQLite - C/C++
-
SQLite教程
•
免費ARP詳解
-
TCP/IP教程
•
Flink 數據傳輸及反壓詳解
•
C# 中 foreach 遍歷的用法
相關標籤/搜索
C/C++函數與算法
c++c++c
c++c
c&&c
c++&c
c&c
C/C++
c++
c#
C&C++
C#教程
NoSQL教程
Redis教程
C#
技術內幕
數據傳輸
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
JDK JRE JVM,JDK卸載與安裝
2.
Unity NavMeshComponents 學習小結
3.
Unity技術分享連載(64)|Shader Variant Collection|Material.SetPassFast
4.
爲什麼那麼多人用「ji32k7au4a83」作密碼?
5.
關於Vigenere爆0總結
6.
圖論算法之最小生成樹(Krim、Kruskal)
7.
最小生成樹 簡單入門
8.
POJ 3165 Traveling Trio 筆記
9.
你的快遞最遠去到哪裏呢
10.
雲徙探險中臺賽道:借道雲原生,尋找「最優路線」
本站公眾號
歡迎關注本站公眾號,獲取更多信息
相關文章
1.
C++內聯函數(C++ inline)
2.
c++ inline(內聯)函數
3.
C++ 內聯函數inline
4.
C++ 內聯函數詳解
5.
《C++》-內聯函數
6.
c++內聯函數
7.
C++內聯函數
8.
C++ 內聯函數
9.
C語言.遞歸函數.回調函數.inline內聯函數
10.
內聯函數inline
>>更多相關文章<<