第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

遞歸函數(shù)若是內(nèi)聯(lián)(inline)函數(shù),是否就不需要函數(shù)調(diào)用時(shí)的大開銷了?

遞歸函數(shù)若是內(nèi)聯(lián)(inline)函數(shù),是否就不需要函數(shù)調(diào)用時(shí)的大開銷了?

慕斯王 2019-02-26 07:03:52
遞歸函數(shù)若是內(nèi)聯(lián)(inline)函數(shù),是否就不需要函數(shù)調(diào)用時(shí)的大開銷了?
查看完整描述

3 回答

?
ibeautiful

TA貢獻(xiàn)1993條經(jīng)驗(yàn) 獲得超6個(gè)贊

遞歸是內(nèi)聯(lián)的話,編譯器如何編譯?
遞歸的處理方法是講函數(shù)調(diào)用層層入棧,通過(guò)出棧來(lái)調(diào)用每層的函數(shù);
如果寫成內(nèi)聯(lián),編譯器編譯時(shí)都搞不清楚了吧,更別談?wù){(diào)用了。

查看完整回答
反對(duì) 回復(fù) 2019-03-26
?
大話西游666

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超14個(gè)贊

#include <stdio.h>
inline int fact(int n)
{
if(n<=1)
{
return 1;
}
else
{
return n*fact(n-1);
}
}

int main()
{
int n;

printf("Input n:");
scanf("%d",&n);
printf("n!=%d\n",fact(n));
return 0;
}
上面,我把計(jì)算階乘的fact函數(shù),聲明為內(nèi)聯(lián)函數(shù)了,照樣能正常編譯,正常運(yùn)行,結(jié)果也正確

我們知道,內(nèi)聯(lián)函數(shù),在編譯的時(shí)候,就對(duì)它進(jìn)行了展開
這樣做的后果是:
提供程序執(zhí)行的速度,因?yàn)椴恍枰{(diào)用函數(shù)所進(jìn)行的堆棧操作了
但它會(huì)增加代碼的長(zhǎng)度,因此,當(dāng)函數(shù)很長(zhǎng)的時(shí)候,不建議使用內(nèi)聯(lián)的方式

但考慮到遞歸函數(shù),編譯器不可能無(wú)限展開的,而上面的例子又是可以的
所以,我猜想:
這種遞歸的情況下,即使聲明成內(nèi)聯(lián)的,編譯也不報(bào)錯(cuò),
但實(shí)際上,仍然不是按內(nèi)聯(lián)的方式進(jìn)行處理

對(duì)比了一下內(nèi)聯(lián)和不內(nèi)聯(lián)兩種情況下的obj和exe文件,發(fā)現(xiàn)他們的大小都是一樣的:
aaa.obj 3,414 字節(jié)
aaa.exe 163,926 字節(jié)
也許這就證明了我的猜想吧

補(bǔ)充:
c語(yǔ)言當(dāng)然不支持內(nèi)聯(lián)啊,c++才有這個(gè)概念。
我之所以編譯沒有錯(cuò),說(shuō)明我用的是c++的編譯器嘛
其實(shí),我用的是VC++6.0,哈哈



查看完整回答
反對(duì) 回復(fù) 2019-03-26
?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊

內(nèi)聯(lián)函數(shù)不是總能申請(qǐng)成功的 ,她也需要較大的開銷,只是它存儲(chǔ)于緩存中,少了一些去外存調(diào)用函數(shù)的時(shí)間,當(dāng)函數(shù)調(diào)用次數(shù)不多時(shí),幾乎沒有優(yōu)勢(shì)。

查看完整回答
反對(duì) 回復(fù) 2019-03-26
  • 3 回答
  • 0 關(guān)注
  • 2280 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)