函式呼叫在執行時,首先要在棧中為形參和區域性變數分配儲存空間,然後還要將實參的值複製給形參,接下來還要將函式的返回位址(該位址指明了函式執行結束後,程式應該回到**繼續執行)放入棧中,最後才跳轉到函式內部執行。這個過程是要耗費時間的。
另外,函式執行 return 語句返回時,需要從棧中**形參和區域性變數占用的儲存空間,然後從棧中取出返回位址,再跳轉到該位址繼續執行,這個過程也要耗費時間。
呼叫函式需要一定時間,如果函式需要頻繁的呼叫,累計時間就會增加,從而降低效率,而c++有乙個方法,在編譯的時候就將呼叫的函式**嵌入主函式中去,這個方法叫做內建函式,也叫內聯函式。
內建函式只需要在函式的首行左端加上關鍵字inline。
inline int max(int a,int b)
有了內聯函式,就能像呼叫乙個函式那樣方便地重複使用一段**,而不需要付出執行函式呼叫的額外開銷。很顯然,使用內聯函式會使最終可執行程式的體積增加。以時間換取空間,或增加空間消耗來節省時間,這是計算機學科中常用的方法。
內聯函式中的**應該只是很簡單、執行很快的幾條語句。如果乙個函式較為複雜,它執行的時間可能上萬倍於函式呼叫的額外開銷,那麼將其作為內聯函式處理的結果是付出讓**體積增加不少的代價,卻只使速度提高了萬分之一,這顯然是不划算的。
有時函式看上去很簡單,例如只有乙個包含一兩條語句的迴圈,但該迴圈的執行次數可能很多,要消耗大量時間,那麼這種情況也不適合將其實現為內聯函式。
可參考:
C 內聯函式(內嵌函式,內建函式)
呼叫函式時需要一定的時間和空間的開銷。c 提供一種提高效率的方法,即在編譯時將函式呼叫處用函式體替換,類似於c語言中的巨集展開。這種在函式呼叫處直接嵌入函式體的函式稱為內聯函式 inline function 又稱內嵌函式或內嵌函式。指定內聯函式的方法很簡單,只需要在定義函式時增加 inline 關...
C 內聯函式
1 什麼是內聯函式?內聯函式就是小型函式,犧牲空間來節省函式呼叫的開銷,一般用作比較小的函式,即函式內部沒有迴圈 開關語句等。內聯函式被發明出來就是為了取代c中的巨集,因為巨集是單純的替換而沒有型別檢查所以經常出毛病,2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率...
C 內聯函式
1 什麼是內聯函式?2 為什麼要引入內聯函式?3 為什麼inline能取代巨集?4 內聯函式和巨集的區別?5 什麼時候用內聯函式?6 如何使用內聯函式?7 內聯函式的優缺點?8 如何禁止函式進行內聯?9 注意事項 1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內...