C++中的內聯(inline)


普通函數

  我們都知道,程序就是指令的集合。在運行程序時,操作系統將這些指令載入到計算機內存中。因此,每一組指令都有一個特定的內存地址。C++程序中的各個函數也有存儲的內存空間,當程序執行到函數調用時,大致是如下步驟:

  (1)遇到函數調用指令時,會存儲下該調用指令的地址,同時將參數壓入堆棧中;

  (2)然后跳到標記函數起點的內存單元當中,執行函數代碼,將返回值放回到寄存器當中;

  (3)根據之前保存的地址,返回調用指令處,繼續執行。

 

舉個例子,就像看書時,看到書中突然出現一個名詞,然后書上說這個名詞在150頁有詳細解釋。那么我們就會記下現在看到80頁了,然后翻到150頁看完解釋后,再返回80頁。

因此,在使用普通函數時由於需要來回跳轉所以它的執行速度比較慢,特別是需要調用很多次函數時。

 內聯函數

  內聯函數,顧名思義就是將編譯代碼和其它代碼 “內聯” 起來了,而不是像之前一樣分散在不同的地方了。內聯函數在調用時,程序會直接使用內聯函數代碼的拷貝來替換調用指令。

  由於內聯代碼在執行的時候程序無需進行來回的跳轉,所以它的執行速度相對於普通函數能快點;不過它也有自己的缺點,那就是對內存得耗損,如果程序需要在十個地方調用同一個內聯函數,那這個程序將會將這個代碼拷貝10次。

  要使用內聯函數,只需要在函數的聲明或者定義前加上關鍵字inline即可。

  另外,在類定義中定義的成員函數把函數聲明為內聯的,即便沒有使用 inline 標識符。

 

參考鏈接:https://blog.csdn.net/m0_37962600/article/details/78332985

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM