c 的內聯函式

2021-09-03 05:15:03 字數 1266 閱讀 3364

一、內聯函式的利弊

利:1、不需要蒙受函式呼叫所帶來的額外開銷。

2、編譯器最優化機制通常被設計用來濃縮那些「不含函式呼叫」的**,當inline某個函式時,編譯器就可以對它執行語境相關最優化。

弊:1、inline函式的整體觀念是,將「對函式的每一次呼叫」都以函式本體替換之,這樣會增加目標碼大小。

2、inline造成的**膨脹會導致額外的換頁行為,降低指令快取記憶體裝置的命中率,以及伴隨這些而來的效率損失。

折中:對函式本體較小的函式使用inline,編譯器針對「函式本體」所產出的碼可能比針對函式呼叫所產出的碼更小,這樣就可以實現較小的目標碼和較高的指令快取記憶體裝置命中率。

二、內聯函式使用

inline只是對編譯器的乙個申請,不是強制命令。這項申請可以隱喻提出,也可以明確提出。

//隱喻宣告:

class dog

...private:

int theage;

};//明確宣告:

//在函式定義前加上關鍵字inline。

//示例1、

inline.cpp

#inclue //an inline function definition

inline double square(double x)

int main()

//示例2、

//標準的max template(來自)

templateinline const t& std::max(const t& a, const t& b)

三、內聯函式不內聯

內聯函式不內聯,簡單解釋就是程式設計師請求將函式作為內聯函式時,編譯器並不一定會滿足這種情況。

1、最簡單的一種情況:編譯認為該函式過大或注意到函式中有遞迴或迴圈。

2、virtual函式也會使inline落空,因為virtual意味著等待,直到執行期才確定呼叫哪個函式。

3、編譯器通常不對「通過函式指標而進行的呼叫」實施inlining。

例:

inline void f() //假設編譯器有意inline「對f的呼叫」

void (* pf) () = f ; //pf指向f

f(); //這個呼叫將被inlined,因為它是乙個正常呼叫

pf(); //這個呼叫或許不被inlined,因為它通過函式指標達成

c 的內聯函式

1 什麼是內聯函式?2 為什麼要引入內聯函式?3 為什麼inline能取代巨集?4 內聯函式和巨集的區別?5 什麼時候用內聯函式?6 如何使用內聯函式?7 內聯函式的優缺點?8 如何禁止函式進行內聯?9 注意事項 1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內...

C 的內聯函式

影響效能的乙個重要因素是內聯技巧,內聯函式也可以叫內嵌函式。在c 中,函式呼叫需要建立棧環境,進行引數複製,保戶呼叫現場,返回時,還要進行返回值複製,恢復呼叫現場。這些工作都是與完成特定的任務操作無關的額外開銷。程式效率由於該項工作而受到影響,所以,流行的cpu都已經將函式呼叫的額外開銷硬體化了,以...

C 的內聯函式

內聯函式是一種特殊的函式,具有函式的普通特徵 引數檢查,返回型別等 要使用內聯函式,必須採取以下措施之一 1 在函式宣告前加上關鍵字 inline 2 在函式定義前加上關鍵字inline 內聯函式的限制 不能對函式進行取址操作 內聯函式不能遞迴 內聯函式和普通函式的區別 1 內聯函式和常規函式的區別...