inline函數(shù)和C的帶參數(shù)的宏類似,是直接在函數(shù)出現(xiàn)的地方展開,而不是調(diào)用,這樣可以節(jié)省掉調(diào)用時間,但不是所有函數(shù)都適合內(nèi)聯(lián),編譯器會自己判斷的。
創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站制作、成都做網(wǎng)站網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元嘉黎做網(wǎng)站,已為上家服務(wù),為嘉黎各地企業(yè)和個人服務(wù),聯(lián)系電話:18980820575
第二個問題,不知道,至少有了函數(shù)體現(xiàn)出了模塊化編程的思想。調(diào)用函數(shù)肯定會比直接寫代碼多一步調(diào)用過程,但內(nèi)聯(lián)函數(shù)就不是。但效率來說,應(yīng)該不存在節(jié)約浪費之說,除非是大量連續(xù)的調(diào)用。而且雖然多了調(diào)用部分,那很可能就節(jié)約了內(nèi)存,因為沒有調(diào)用的時候可能并沒有占用內(nèi)存。
個人意見,不一定對。期待大牛解說。 內(nèi)聯(lián)函數(shù)就是在程序編譯的時候,將你的內(nèi)聯(lián)函數(shù)寫到你調(diào)用這個函數(shù)的地方,所以你調(diào)用了多少次,電腦就會自動給你寫幾次在程序中,但是當(dāng)程序運行的時候,程序就不會去調(diào)用函數(shù)了,而是直接向下運行,如果你的內(nèi)聯(lián)函數(shù)沒有遞歸或者循環(huán)的話,會大大減少程序的運行時候(調(diào)用函數(shù)有一個入棧和出棧的過程,會占用一定的時間),當(dāng)然換來的就是占用的空間變大了。
所以,如果一個函數(shù)代碼較小,但調(diào)用非常頻繁的話,就可以用內(nèi)聯(lián);不過如果這個函數(shù)有循環(huán)或遞歸的話,我建議最好還是別用。
優(yōu)點是提高運行時間效率,缺點是增加了空間開銷
對于普通函數(shù),函數(shù)調(diào)用需要時間和空間開銷,調(diào)用函數(shù)實際上將程序執(zhí)行流程轉(zhuǎn)移到被調(diào)函數(shù)中,被調(diào)函數(shù)的代碼執(zhí)行完后,再返回到調(diào)用的地方。這種調(diào)用操作要求調(diào)用前保護(hù)好現(xiàn)場并記憶執(zhí)行的地址,返回后恢復(fù)現(xiàn)場,并按原來保存的地址繼續(xù)執(zhí)行。對于較長的函數(shù)這種開銷可以忽略不計,但對于一些函數(shù)體代碼很短,又被頻繁調(diào)用的函數(shù),就不能忽視這種開銷。引入內(nèi)聯(lián)函數(shù)正是為了解決這個問題,提高程序的運行效率。
對于內(nèi)聯(lián)函數(shù),在程序編譯時,編譯器將程序中出現(xiàn)的內(nèi)聯(lián)函數(shù)的調(diào)用表達(dá)式用內(nèi)聯(lián)函數(shù)的函數(shù)體來進(jìn)行替換。由于在編譯時將內(nèi)聯(lián)函數(shù)體中的代碼替代到程序中,因此會增加目標(biāo)程序代碼量,進(jìn)而增加空間開銷,而在時間開銷上不象函數(shù)調(diào)用時那么大,可見它是以目標(biāo)代碼的增加為代價來換取時間的節(jié)省。
引入內(nèi)聯(lián)函數(shù)的目的是為了解決程序中函數(shù)調(diào)用的效率問題。
函數(shù)是一種更高級的抽象。它的引入使得編程者只關(guān)心函數(shù)的功能和使用方法,而不必關(guān)心函數(shù)功能的具體實現(xiàn);函數(shù)的引入可以減少程序的目標(biāo)代碼,實現(xiàn)程序代碼和數(shù)據(jù)的共享。但是,函數(shù)調(diào)用也會帶來降低效率的問題,因為調(diào)用函數(shù)實際上將程序執(zhí)行順序轉(zhuǎn)移到函數(shù)所存放在內(nèi)存中某個地址,將函數(shù)的程序內(nèi)容執(zhí)行完后,再返回到轉(zhuǎn)去執(zhí)行該函數(shù)前的地方。這種轉(zhuǎn)移操作要求在轉(zhuǎn)去前要保護(hù)現(xiàn)場并記憶執(zhí)行的地址,轉(zhuǎn)回后先要恢復(fù)現(xiàn)場,并按原來保存地址繼續(xù)執(zhí)行。因此,函數(shù)調(diào)用要有一定的時間和空間方面的開銷,于是將影響其效率。特別是對于一些函數(shù)體代碼不是很大,但又頻繁地被調(diào)用的函數(shù)來講,解決其效率問題更為重要。引入內(nèi)聯(lián)函數(shù)實際上就是為了解決這一問題。
在程序編譯時,編譯器將程序中出現(xiàn)的內(nèi)聯(lián)函數(shù)的調(diào)用表達(dá)式用內(nèi)聯(lián)函數(shù)的函數(shù)體來進(jìn)行替換。顯然,這種做法不會產(chǎn)生轉(zhuǎn)去轉(zhuǎn)回的問題,但是由于在編譯時將函數(shù)休中的代碼被替代到程序中,因此會增加目標(biāo)程序代碼量,進(jìn)而增加空間開銷,而在時間代銷上不象函數(shù)調(diào)用時那么大,可見它是以目標(biāo)代碼的增加為代價來換取時間的節(jié)省。
速度是有代價的,inline和宏都是用空間換時間。
使用內(nèi)聯(lián)函數(shù)的時候要注意:
1.遞歸函數(shù)不能定義為內(nèi)聯(lián)函數(shù)
2.內(nèi)聯(lián)函數(shù)一般適合于不存在while和switch等復(fù)雜的結(jié)構(gòu)且只有1~5條語句的小函數(shù)上,否則編譯系統(tǒng)將該函數(shù)視為普通函數(shù)。
3.內(nèi)聯(lián)函數(shù)只能先定義后使用,否則編譯系統(tǒng)也會把它認(rèn)為是普通函數(shù)。
4.對內(nèi)聯(lián)函數(shù)不能進(jìn)行異常的接口聲明。
名稱欄目:內(nèi)聯(lián)函數(shù)c語言優(yōu)點 C語言內(nèi)聯(lián)函數(shù)
鏈接URL:http://m.kartarina.com/article38/hjihpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、域名注冊、建站公司、面包屑導(dǎo)航、網(wǎng)站設(shè)計公司、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)