內嵌函式inline的使用探索(來自C++primer plus)

來源:互聯網
上載者:User

    在課堂上聽到了一個關於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++為了提高程式運行效率所作的一項改進。常規的函數和內嵌函式的主要區別在於編譯器怎麼將它們組合到程式中去。

  編譯的最終產品是可執行程式,即機器代碼。運行程式時,作業系統將這些指令載入到電腦的記憶體去,因此每條指令都有特定的地址,電腦按順序執行這些指令。在函數調用等操作中,涉及到使電腦跳過一些指令,向前或向後執行其他的指令,完畢後再跳回來,這期間就會涉及到現場的保護等出棧入棧操作,耗費了大量的時間。

  而內嵌函式提供了另一種的操作方式,編譯器將調用內嵌函式的地方用內嵌函式的代碼直接展開,而不是用函數調用,這樣就會節省了程式跳轉帶來的出入棧操作,所以執行時間就短,但這樣也帶來一個缺點:就是代碼要佔用更多的記憶體。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.