普通函數
我們都知道,程序就是指令的集合。在運行程序時,操作系統將這些指令載入到計算機內存中。因此,每一組指令都有一個特定的內存地址。C++程序中的各個函數也有存儲的內存空間,當程序執行到函數調用時,大致是如下步驟:
(1)遇到函數調用指令時,會存儲下該調用指令的地址,同時將參數壓入堆棧中;
(2)然后跳到標記函數起點的內存單元當中,執行函數代碼,將返回值放回到寄存器當中;
(3)根據之前保存的地址,返回調用指令處,繼續執行。
舉個例子,就像看書時,看到書中突然出現一個名詞,然后書上說這個名詞在150頁有詳細解釋。那么我們就會記下現在看到80頁了,然后翻到150頁看完解釋后,再返回80頁。
因此,在使用普通函數時由於需要來回跳轉所以它的執行速度比較慢,特別是需要調用很多次函數時。
內聯函數
內聯函數,顧名思義就是將編譯代碼和其它代碼 “內聯” 起來了,而不是像之前一樣分散在不同的地方了。內聯函數在調用時,程序會直接使用內聯函數代碼的拷貝來替換調用指令。
由於內聯代碼在執行的時候程序無需進行來回的跳轉,所以它的執行速度相對於普通函數能快點;不過它也有自己的缺點,那就是對內存得耗損,如果程序需要在十個地方調用同一個內聯函數,那這個程序將會將這個代碼拷貝10次。
要使用內聯函數,只需要在函數的聲明或者定義前加上關鍵字inline即可。
另外,在類定義中定義的成員函數把函數聲明為內聯的,即便沒有使用 inline 標識符。
參考鏈接:https://blog.csdn.net/m0_37962600/article/details/78332985