內聯函式知多少

2021-10-07 18:50:15 字數 826 閱讀 8313

到底啥是內聯(inline)函式?為什麼內聯函式效率比較高呢?

要想解決上述問題,就必須先來說說普通的函式呼叫是怎樣的流程.在大多數機器上,一次函式呼叫其實包含著一系列工作:1.呼叫前先儲存暫存器,並在返回時恢復;2.可能需要拷貝實參;3.程式轉向乙個新的位置繼續執行等等.這些無疑都是函式呼叫時的開銷,而內聯函式則可以避免函式呼叫產生的這些開銷,因此它的效率比較高.

內聯函式是怎麼避免函式呼叫時的開銷呢?舉乙個例子:

const string&

shorterstring

(const string& str1,

const string& str2 )

這是乙個普通的函式,而定義成內聯函式之後,則如下呼叫

cout <<

shorerstring

( s1, s2 )

<< endl;

將在編譯過程中展開成類似於下面的形式

cout <<

(s1.

size()

<= s2.

size()

? s1 : s2)

<< endl;

從而消除了shorterstring函式的執行時開銷.

值得注意的是,內聯說明只是向編譯器發出的乙個請求,編譯器可以選擇忽略這個請求.至於編譯器到底同意內聯請求還是忽略,我們也不知道.一般來說,簡短的函式宣告為inline時,編譯器大概率會同意內聯請求;而對於複雜函式,編譯器一般會忽略.

函式知多少(二)

上次聊了關於定義函式的知識,還有引數方面的,這次先補充一點引數小知識,還有簡單的講一下閉包。引入的引數會儲存在arguments陣列物件中,第乙個引入的引數儲存在aruguments 0 中,以此類推,參見以下 var myarr hangzhou shanghai beijing guangzho...

資訊列印函式phpinfo知多少

php 4,php 5,php 7 phpinfo 輸出關於 php 配置的資訊 phpinfo int what info all bool 輸出 php 當前狀態的大量資訊,包含了 php 編譯選項 啟用的擴充套件 php 版本 伺服器資訊和環境變數 如果編譯為乙個模組的話 php環境變數 作業...

閘道器知多少

閘道器 gateway 顧名思義,就是乙個網路到另乙個網路的關口。維基百科對閘道器的定義為 在計算機網路中,閘道器 gateway 是 其他伺服器通訊資料的伺服器,接收從客戶端傳送來的請求時,它就像自己擁有資源的源伺服器一樣對請求進行處理。但是,很多時候,我們會將路由器和閘道器認為是同乙個概念。其實...