c 內聯函式 inline

2021-09-28 16:11:30 字數 1136 閱讀 8243

使用函式能夠避免將相同**重寫多次的麻煩,還能減少可執行程式的體積,但也會帶來程式執行時間上的開銷。

函式呼叫在執行時,首先要在棧中為形參和區域性變數分配儲存空間,然後還要將實參的值複製給形參,接下來還要將函式的返回位址(該位址指明了函式執行結束後,程式應該回到**繼續執行)放入棧中,最後才跳轉到函式內部執行。這個過程是要耗費時間的。

另外,函式執行 return 語句返回時,需要從棧中**形參和區域性變數占用的儲存空間,然後從棧中取出返回位址,再跳轉到該位址繼續執行,這個過程也要耗費時間。

總之,使用函式呼叫語句和直接把函式中的**重新抄寫一遍相比,節省了人力,但是帶來了程式執行時間上的額外開銷。

一般情況下,這個開銷可以忽略不計。但是,如果乙個函式內部沒有幾條語句,執行時間本來就非常短,那麼這個函式呼叫產生的額外開銷和函式本身執行的時間相比,就顯得不能忽略了。假如這樣的函式在乙個迴圈中被上千萬次地執行,函式呼叫導致的時間開銷可能就會使得程式執行明顯變慢。

作為特別注重程式執行效率,適合編寫底層系統軟體的高階程式語言,c++ 用 inline 關鍵字較好地解決了函式呼叫開銷的問題。

inline vector3d world2camera ( const vector3d& p_w, const se3& t_c_w )
增加了 inline 關鍵字的函式稱為「內聯函式」。內聯函式和普通函式的區別在於:當編譯器處理呼叫內聯函式的語句時,不會將該語句編譯成函式呼叫的指令,而是直接將整個函式體的**插人呼叫語句處,就像整個函式體在呼叫處被重寫了一遍一樣。

有了內聯函式,就能像呼叫乙個函式那樣方便地重複使用一段**,而不需要付出執行函式呼叫的額外開銷。很顯然,使用內聯函式會使最終可執行程式的體積增加。以時間換取空間,或增加空間消耗來節省時間,這是計算機學科中常用的方法。

內聯函式中的**應該只是很簡單、執行很快的幾條語句。如果乙個函式較為複雜,它執行的時間可能上萬倍於函式呼叫的額外開銷,那麼將其作為內聯函式處理的結果是付出讓**體積增加不少的代價,卻只使速度提高了萬分之一,這顯然是不划算的。

有時函式看上去很簡單,例如只有乙個包含一兩條語句的迴圈,但該迴圈的執行次數可能很多,要消耗大量時間,那麼這種情況也不適合將其實現為內聯函式。

另外,需要注意的是,呼叫內聯函式的語句前必須已經出現內聯函式的定義(即整個數體),而不能只出現內聯函式的宣告。

inline函式 C 內聯函式 inline

inline要起作用,必須要與函式定義放在一起,而不是函式的宣告 inline 當編譯器處理呼叫內聯函式的語句時,不會將該語句編譯成函式呼叫的指令,而是直接將整個函式體的 插人呼叫語句處,就像整個函式體在呼叫處被重寫了一遍一樣,在執行時是順序執行,而不會進行跳轉。優點 內聯函式沒有執行函式呼叫的開銷...

C 內聯函式 inline

巨集 就是使用乙個字串來代替乙個表示式 或函式呼叫 編譯之前,預處理器會使用這個巨集字串所代表的表示式 或函式呼叫 來替換所有出現的巨集字串,這樣的話,用巨集表示的函式呼叫 就不用另外開闢函式棧,不用保護和恢復函式呼叫現場,這樣就提高了 的執行效率 所以,呼叫乙個巨集比呼叫乙個函式更有效 但是呼叫巨...

c 內聯函式inline

1.inline原理 在程式編譯時,編譯器將程式中出現的內聯函式的呼叫表示式用內聯函式的函式體來進行替代。採用空間換時間的策略。是以 膨脹 複製 為代價,僅僅省去了函式呼叫的開銷,從而提高函式的執行效率。例如 如果乙個函式被指定為inline函式,則它將在程式中每個呼叫點上被展開。int i 10 ...