在課堂上聽到了一個關於inline的例子,關inline函數的執行效率的問題。在課後根據回憶編寫了一下,可以看出inline函數的執行效率確實比普通的函數要高.
廢話不說,上代碼:
調用內嵌函式:
#include <iostream>
using namespace std;
inline void delay()
{
int a;
for(long int i=0;i<10000;i++)
a=0;
}
int main()
{
for(long int i=0;i<10000;i++)
delay();
cout<<"Which one is long?"<<endl;
return 0;
}
未調用內嵌函式
#include <iostream>
using namespace std;
void delay()
{
int a;
for(long int i=0;i<10000;i++)
a=0;
}
int main()
{
for(long int i=0;i<10000;i++)
delay();
cout<<"Which one is long?"<<endl;
return 0;
}
大家可以在windows下執行一下,觀察一下那個程式執行的時間比較長,實際觀察可以看出,調用內嵌函式的執行時間明顯短於調用非內嵌函式的執行時間。注意在Win32 Debug是看不出來效果的,要到Win32 Release版本下才能看出來結果。
下面從C++語言角度來解釋:
內嵌函式是C++為了提高程式運行效率所作的一項改進。常規的函數和內嵌函式的主要區別在於編譯器怎麼將它們組合到程式中去。
編譯的最終產品是可執行程式,即機器代碼。運行程式時,作業系統將這些指令載入到電腦的記憶體去,因此每條指令都有特定的地址,電腦按順序執行這些指令。在函數調用等操作中,涉及到使電腦跳過一些指令,向前或向後執行其他的指令,完畢後再跳回來,這期間就會涉及到現場的保護等出棧入棧操作,耗費了大量的時間。
而內嵌函式提供了另一種的操作方式,編譯器將調用內嵌函式的地方用內嵌函式的代碼直接展開,而不是用函數調用,這樣就會節省了程式跳轉帶來的出入棧操作,所以執行時間就短,但這樣也帶來一個缺點:就是代碼要佔用更多的記憶體。