常規函數與內聯函數的區別不在于編寫方式,而在于編譯器如何將他們組合到程序中。常規函數調用時,程序將在函數調用后立即存儲該指令的內存地址,并將函數參數賦值到堆棧,跳到標記函數起點的內存單元,執行函數代碼,然后跳回到地址被保存的指令處。來回跳躍并記錄跳躍位置意味著常規函數需要一定的開銷。
內聯函數則編譯器將使用相應的函數代碼替換函數調用(即直接展開),無需來回跳轉。因此運行速度比常規函數快,但會占用較多內存。但如果執行函數代碼比處理函數調用機制的時間長,則節省的時間只占很小一部分。故若定義占多行,則不太合適。相反,如果代碼執行時間很短,或者經常被調用,則很有意義。
措施是在函數聲明和函數定義前加上關鍵字inline。通常是省略原型,將整個定義放在本應提供聲明的地方(例如.h文件中)。格式如下:
inline double square ( double x) { return x * x;}
內聯函數的原始實現實際上是#define提供宏。
|
新聞熱點
疑難解答