九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
C++內(nèi)聯(lián)函數(shù)詳解

1.函數(shù)調(diào)用原理

"編譯過程的最終產(chǎn)品是可執(zhí)行程序--由一組機(jī)器語言指令組成。運(yùn)行程序時(shí),操作系統(tǒng)將這些指令載入計(jì)算機(jī)內(nèi)存中,因此每條指令都有特定的內(nèi)存地址。計(jì)算機(jī)隨后將逐步執(zhí)行這些指令。有時(shí)(如有循環(huán)和分支語句時(shí)),將跳過一些指令,向前或向后跳到特定地址。常規(guī)函數(shù)調(diào)用也使程序跳到另一個(gè)地址(函數(shù)的地址),并在函數(shù)結(jié)束時(shí)返回。下面更詳細(xì)地介紹這一過程的典型實(shí)現(xiàn)。執(zhí)行到函數(shù)調(diào)用指令時(shí),程序?qū)⒃诤瘮?shù)調(diào)用后立即存儲(chǔ)該指令的內(nèi)存地址,并將函數(shù)參數(shù)復(fù)制到堆棧(為此保留的內(nèi)存塊),跳到標(biāo)記函數(shù)起點(diǎn)的內(nèi)存單元,執(zhí)行函數(shù)代碼(也許還需將返回值放入寄存器中),然后跳回到地址被保存的指令處(這與閱讀文章時(shí)停下來看腳注,并在閱讀完腳注后返回到以前閱讀的地方類似)。來回跳躍并記錄跳躍位置意味著以前使用函數(shù)時(shí),需要一定的開銷。"

2.內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)提供了另一種選擇。編譯器將使用相應(yīng)的函數(shù)代碼替換函數(shù)調(diào)用。因此,內(nèi)聯(lián)函數(shù)的運(yùn)行速度比常規(guī)函數(shù)稍快,但代價(jià)是需要占用更多內(nèi)存。

3.內(nèi)聯(lián)函數(shù)的使用
在函數(shù)聲明前加上關(guān)鍵字inline;
在函數(shù)定義前加上關(guān)鍵字inline。
示例如下:

#include<iostream>inline double square(double x){return x*x;}int main(){    using namespace std;    double a,b;    double c = 13.0;    a = square(5.0);    b = square(4.5+7.5);    cout<<"a="<<a<<",b="<<b<<endl;    cout<<"c="<<c<<endl;    cout<<"c squared="<<square(c++)<<endl;    cout<<"now c="<<c<<endl;    return 0;}

程序輸出結(jié)果如下:
a=25,b=144
c=13
c square=169
now c=14

4.內(nèi)聯(lián)函數(shù)與宏定義的區(qū)別
C語言使用預(yù)處理器語句#define來提供宏。如下例所示:
#define SQUARE(X) X*X
宏定義時(shí)通過文本替換開實(shí)現(xiàn)的--X是參數(shù)的符號(hào)標(biāo)記。
a = square(5.0);->a=5.0*5.0;
b = square(4.5+7.5);->b=4.5+7.5*4.5+7.5
d = square(c++);->d=c++*c++
可以看出,對(duì)于b,需要使用括號(hào)才能正常運(yùn)算。
#define SQUARE(X) ((X)*(X))
對(duì)于c,卻仍遞增了兩次。
因此,宏定義和內(nèi)聯(lián)函數(shù)存在本質(zhì)的區(qū)別,轉(zhuǎn)換的時(shí)候應(yīng)考慮是否轉(zhuǎn)換后功能是否正常。

5.什么時(shí)候使用內(nèi)聯(lián)函數(shù)
如果執(zhí)行函數(shù)代碼的時(shí)間比處理函數(shù)調(diào)用機(jī)制的時(shí)間長(zhǎng),則節(jié)省的時(shí)間占比很小。若代碼執(zhí)行時(shí)間很短,則內(nèi)聯(lián)函數(shù)就可以節(jié)省函數(shù)調(diào)用的時(shí)間。

 

參考資料:《C++ Primer.Plus》 pp.253-255

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
8.1 C++內(nèi)聯(lián)函數(shù)
inline用法與作用
6.14 使用預(yù)處理器進(jìn)行調(diào)試
#、##操作符,__VA_ARGS__
c++ 中函數(shù)操作符operator() 的使用
【C++】 命名空間 namespace <iostream> 與 <iostream.h...
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服