色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C語(yǔ)言?xún)?nèi)聯(lián)函數(shù)

汽車(chē)電子技術(shù) ? 來(lái)源:混說(shuō)Linux ? 作者: HunTalk_Linux ? 2023-02-21 16:55 ? 次閱讀

內(nèi)聯(lián)函數(shù)是C語(yǔ)言C++中借鑒過(guò)來(lái)的,適當(dāng)?shù)氖褂脙?nèi)聯(lián)函數(shù)可以提高程序的執(zhí)行效率。本篇文章就來(lái)講解下內(nèi)聯(lián)函數(shù),趕緊來(lái)看下吧!

一、函數(shù)調(diào)用

在講內(nèi)聯(lián)函數(shù)之前,我們需要先了解函數(shù)調(diào)用,而函數(shù)調(diào)用,又不得不說(shuō)函數(shù)調(diào)用的開(kāi)銷(xiāo)。

一個(gè)函數(shù)執(zhí)行的時(shí)候,經(jīng)常會(huì)調(diào)用另一個(gè)函數(shù),比如執(zhí)行函數(shù)A時(shí),我們需要對(duì)一些數(shù)據(jù)進(jìn)行處理,將運(yùn)算結(jié)果暫存在R0寄存器,接著要調(diào)用另一個(gè)函數(shù)B,而函數(shù)B也用到了R0這個(gè)寄存器(用于保存函數(shù)的返回值),原本函數(shù)A暫存在R0寄存器的值就被改變了,這樣做肯定不行。

現(xiàn)代計(jì)算機(jī)系統(tǒng)的做法都是會(huì)在執(zhí)行函數(shù)B之前,先把R0寄存器的值保存到堆棧中,函數(shù)B執(zhí)行結(jié)束后,再將堆棧中的值恢復(fù)到R0寄存器中,然后函數(shù)A繼續(xù)執(zhí)行,這樣對(duì)于數(shù)據(jù)處理就不會(huì)有任何問(wèn)題了。

但是,函數(shù)調(diào)用卻消耗一定的時(shí)間進(jìn)行切換,這段時(shí)間用來(lái)保存現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng),大約相當(dāng)于一兩條語(yǔ)句的執(zhí)行時(shí)間,這就是函數(shù)調(diào)用帶來(lái)的開(kāi)銷(xiāo)。

圖片

假如函數(shù)B很小,只有一兩行代碼,從上圖我們可以看出,真正只有函數(shù)B執(zhí)行代碼的那段時(shí)間是對(duì)我們有用的,切換帶來(lái)的就是額外的成本開(kāi)銷(xiāo)了,如果函數(shù)A里面多次調(diào)用函數(shù)B,那開(kāi)銷(xiāo)就更明顯了。

圖片

二、內(nèi)聯(lián)函數(shù)

函數(shù)B很小,又被頻繁的調(diào)用,可能函數(shù)調(diào)用的切換時(shí)間比函數(shù)內(nèi)代碼的執(zhí)行時(shí)間還長(zhǎng),這樣明顯劃不來(lái),那么我們就可以將這個(gè)函數(shù)聲明為內(nèi)聯(lián)(加上 inline ),編譯器在編譯時(shí),會(huì)把內(nèi)聯(lián)函數(shù)的實(shí)現(xiàn)替換到每個(gè)調(diào)用內(nèi)聯(lián)函數(shù)的地方( 可以與宏函數(shù)做類(lèi)比 ),在調(diào)用處將代碼展開(kāi),相當(dāng)于自動(dòng)將函數(shù)B的代碼在調(diào)用它的地方復(fù)制了一份副本,沒(méi)有了保護(hù)現(xiàn)場(chǎng)和恢復(fù)現(xiàn)場(chǎng)的時(shí)間,從而節(jié)省了函數(shù)調(diào)用的開(kāi)銷(xiāo)。

圖片

內(nèi)聯(lián)函數(shù)一般要求如下:

  1. 函數(shù)體積小,通常5行以?xún)?nèi);
  2. 被頻繁調(diào)用;
  3. 函數(shù)內(nèi)無(wú)復(fù)雜的實(shí)現(xiàn),比如:while、for循環(huán),switch,遞歸等;
  4. 函數(shù)沒(méi)有包含靜態(tài)變量。

來(lái)看一個(gè)簡(jiǎn)單的內(nèi)聯(lián)函數(shù)的例子:

#include 

// 將函數(shù) max_value 聲明為 inline
inline int max_value(int x, int y)
{
    return (x>y) ? x:y;
}

int main()
{
    int a = 1, b = 2;
    int m;
    m = max_value(a, b);
    
    return 0;
}

main函數(shù)代碼在執(zhí)行的時(shí)候是這樣的:

int main()
{
    int a = 1, b = 2;
    int m;
    m = (1>2) ? 1:2;
    
    return 0;
}

內(nèi)聯(lián)函數(shù)在調(diào)用處展開(kāi)了。

在c++ 中定義在類(lèi)里面的函數(shù),默認(rèn)情況下都是內(nèi)聯(lián)的,比如下面這種情況:

#include 
using namespace std;
 
class HunTalk_Linux 
{
public:
    //默認(rèn)是內(nèi)聯(lián)函數(shù)
    int max_value(int x, int y) 
    {
        return(x>y) ? x:y;
    }
};
 
int main() 
{
    return 0;
}

注意 :函數(shù)聲明為內(nèi)聯(lián),僅僅是對(duì)編譯器的建議,如果函數(shù)比較復(fù)雜,編譯器會(huì)將其看做普通函數(shù)。

三、內(nèi)聯(lián)函數(shù)與宏

前面講到可以與宏函數(shù)做類(lèi)比,那么就納悶了,為什么不直接定義一個(gè)宏,而是定義一個(gè)內(nèi)聯(lián)函數(shù)?存在即合理,自然有它存在的道理,相對(duì)于宏,內(nèi)聯(lián)函數(shù)提供了更好的方法:

  • 參數(shù)類(lèi)型檢查 。編譯過(guò)程中,宏調(diào)用并不執(zhí)行類(lèi)型檢查,甚至連正常參數(shù)也不檢查,內(nèi)聯(lián)函數(shù)雖然具有宏的展開(kāi)特性,但其本質(zhì)仍是函數(shù),編譯器仍可以對(duì)其進(jìn)行參數(shù)檢查,而宏就不具備這個(gè)功能。
  • 在宏中的編譯錯(cuò)誤很難發(fā)現(xiàn) ,因?yàn)樗鼈円玫氖菙U(kuò)展的代碼,而不是程序員鍵入的。
  • 便于調(diào)試。 內(nèi)聯(lián)函數(shù)代碼的調(diào)試信息通常比擴(kuò)展的宏代碼更有用,它同樣可以支持?jǐn)帱c(diǎn)、單步......等調(diào)試功能。
  • 接口封裝。 有些內(nèi)聯(lián)函數(shù)可以用來(lái)封裝一個(gè)接口,而宏不具備這個(gè)特性。

四、總結(jié)

引入內(nèi)聯(lián)函數(shù)主要是解決一些頻繁調(diào)用的小函數(shù)造成額外時(shí)間開(kāi)銷(xiāo)的問(wèn)題,但是也要在符合一定內(nèi)聯(lián)函數(shù)的情況下使用。

使用很多的內(nèi)聯(lián)函數(shù),每個(gè)調(diào)用該函數(shù)的地方都需要替換成函數(shù)體,代碼量就會(huì)增加,代碼量就會(huì)增加也同時(shí)帶來(lái)了潛在的編譯時(shí)間的增加。

算法里面有個(gè)概念叫空間換時(shí)間,就是使用內(nèi)存占用更大的算法換取執(zhí)行速度的提升 ,所以說(shuō)適當(dāng)?shù)氖褂脙?nèi)聯(lián)函數(shù)可以提高程序的執(zhí)行效率。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4355

    瀏覽量

    63315
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4858

    瀏覽量

    69548
  • 內(nèi)聯(lián)函數(shù)

    關(guān)注

    0

    文章

    10

    瀏覽量

    2262
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    內(nèi)聯(lián)函數(shù)簡(jiǎn)介

    1.內(nèi)聯(lián)函數(shù)C++中我們通常定義以下函數(shù)來(lái)求兩個(gè)整數(shù)的最大值:復(fù)制代碼 代碼如下:int max(int a, int b){return a > b ? a : b;}為這么一個(gè)小
    發(fā)表于 09-11 16:22

    基于SUIF的函數(shù)內(nèi)聯(lián)技術(shù)

    從基于調(diào)用圖的函數(shù)內(nèi)聯(lián)技術(shù)、函數(shù)參數(shù)的映射技術(shù)和內(nèi)聯(lián)使用的不同策略3 個(gè)方面討論基于SUIF 系統(tǒng)的內(nèi)聯(lián)技術(shù)的實(shí)現(xiàn)。根據(jù)KAP 系統(tǒng)需求,提
    發(fā)表于 03-28 09:50 ?6次下載

    C++如何處理內(nèi)聯(lián)函數(shù)

    當(dāng)一個(gè)函數(shù)內(nèi)聯(lián)和虛函數(shù)時(shí),會(huì)發(fā)生代碼替換或使用虛表調(diào)用嗎? 為了弄 清楚內(nèi)聯(lián)和虛函數(shù),讓我們將它們分開(kāi)來(lái)考慮。通常,一個(gè)
    發(fā)表于 11-29 11:59 ?28次下載

    C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù)

    C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù),使用C語(yǔ)言編程時(shí),常用到的函數(shù)
    發(fā)表于 05-11 16:41 ?0次下載

    內(nèi)聯(lián)函數(shù)詳解

    什么是內(nèi)聯(lián)性和外聯(lián)函數(shù) 類(lèi)的成員函數(shù)可以分為內(nèi)聯(lián)函數(shù)和外聯(lián)函數(shù)
    發(fā)表于 11-02 14:05 ?0次下載

    內(nèi)聯(lián)函數(shù)和外聯(lián)函數(shù)有什么區(qū)別

    內(nèi)聯(lián)函數(shù)是指用inline關(guān)鍵字修飾的函數(shù)。在類(lèi)內(nèi)定義的函數(shù)被默認(rèn)成內(nèi)聯(lián)函數(shù)
    發(fā)表于 12-15 11:52 ?5995次閱讀
    <b class='flag-5'>內(nèi)聯(lián)</b><b class='flag-5'>函數(shù)</b>和外聯(lián)<b class='flag-5'>函數(shù)</b>有什么區(qū)別

    內(nèi)聯(lián)函數(shù)的主要作用是什么_內(nèi)聯(lián)函數(shù)C語(yǔ)言中的作用

    內(nèi)聯(lián)函數(shù)是一種編譯機(jī)制,優(yōu)點(diǎn)從代碼上是看不出來(lái)的,但是程序的執(zhí)行效率上有差別,通常,編譯器對(duì)函數(shù)調(diào)用的處理是一種類(lèi)似中斷的方式,即當(dāng)執(zhí)行到函數(shù)調(diào)用語(yǔ)句時(shí),程序把當(dāng)前所有的狀態(tài)信息比如C
    發(fā)表于 12-15 14:27 ?1.7w次閱讀
    <b class='flag-5'>內(nèi)聯(lián)</b><b class='flag-5'>函數(shù)</b>的主要作用是什么_<b class='flag-5'>內(nèi)聯(lián)</b><b class='flag-5'>函數(shù)</b>在<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>中的作用

    Java之內(nèi)聯(lián)函數(shù)_內(nèi)聯(lián)函數(shù)的優(yōu)缺點(diǎn)

    內(nèi)聯(lián)函數(shù)就是指函數(shù)在被調(diào)用的地方直接展開(kāi),編譯器在調(diào)用時(shí)不用像一般函數(shù)那樣,參數(shù)壓棧,返回時(shí)參數(shù)出棧以及資源釋放等,這樣提高了程序執(zhí)行速度。Java
    發(fā)表于 12-15 15:00 ?3321次閱讀

    C++語(yǔ)言入門(mén)教程之C++語(yǔ)言程序設(shè)計(jì)函數(shù)的詳細(xì)資料概述免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是C++語(yǔ)言入門(mén)教程之C++語(yǔ)言程序設(shè)計(jì)函數(shù)的詳細(xì)資料概述免費(fèi)下載內(nèi)容包括了:1
    發(fā)表于 09-20 14:51 ?23次下載

    C++基礎(chǔ)語(yǔ)法之inline 內(nèi)聯(lián)函數(shù)

    上節(jié)我們分析了C++基礎(chǔ)語(yǔ)法的const,static以及 this 指針,那么這節(jié)內(nèi)容我們來(lái)看一下 inline 內(nèi)聯(lián)函數(shù)吧! inline 內(nèi)聯(lián)
    的頭像 發(fā)表于 09-09 09:38 ?2238次閱讀

    C++語(yǔ)法中的inline內(nèi)聯(lián)函數(shù)詳解

    上節(jié)我們分析了C++基礎(chǔ)語(yǔ)法的const,static以及 this 指針,那么這節(jié)內(nèi)容我們來(lái)看一下 inline 內(nèi)聯(lián)函數(shù)吧! inline 內(nèi)聯(lián)
    的頭像 發(fā)表于 09-09 09:33 ?3445次閱讀

    C語(yǔ)言-內(nèi)聯(lián)函數(shù)、遞歸函數(shù)、指針函數(shù)

    這篇文章介紹C語(yǔ)言內(nèi)聯(lián)函數(shù)、遞歸函數(shù)函數(shù)指針、指針函數(shù)
    的頭像 發(fā)表于 08-14 10:03 ?1787次閱讀

    講解下C語(yǔ)言內(nèi)聯(lián)函數(shù)

    內(nèi)聯(lián)函數(shù)C語(yǔ)言C++中借鑒過(guò)來(lái)的,適當(dāng)?shù)氖褂?b class='flag-5'>內(nèi)聯(lián)函數(shù)
    的頭像 發(fā)表于 02-16 09:15 ?1600次閱讀

    C語(yǔ)言內(nèi)聯(lián)函數(shù),提升C技巧必備

    內(nèi)聯(lián)函數(shù)C語(yǔ)言C++中借鑒過(guò)來(lái)的,適當(dāng)?shù)氖褂?b class='flag-5'>內(nèi)聯(lián)函數(shù)
    的頭像 發(fā)表于 02-16 09:16 ?864次閱讀

    宏的缺陷與內(nèi)聯(lián)函數(shù)的引入

    。 所以為了解決這種不利于調(diào)試的問(wèn)題,就有了內(nèi)聯(lián)函數(shù)。 那么什么是內(nèi)聯(lián)函數(shù)呢? 我們以inline修飾的函數(shù)叫做
    的頭像 發(fā)表于 11-01 17:57 ?513次閱讀
    主站蜘蛛池模板: 91热久久免费频精品动漫99 | 找老女人泻火对白自拍 | 久久久久久久久亚洲 | 成熟YIN荡美妞A片视频麻豆 | 一边吃奶一边添P好爽故事 一边吃奶一边啪啪真舒服 一本之道加勒比在线观看 一本之道高清在线观看一区 | 美女露出乳胸扒开尿口 | 久久精品熟一区二区三区 | 美女pk精子4 | 精品亚洲麻豆1区2区3区 | 免费看国产精品麻豆 | 最近中文字幕MV高清在线 | 伦理片天堂eeuss影院2o12 | 色-情-伦-理一区二区三区 | 国内精品久久久久影院老司 | 日本乱子伦一区二区三区 | 绞尽奶汁by菊花开 | 伦理片 a在线线版韩国 | 欧洲最强rapper潮水喷视频 | 国产亚洲精品AV麻豆狂野 | 无码精品AV久久久奶水 | 亚洲AV久久无码精品国产网站 | 做i爱视频30分钟免费 | 国产1769一七六九视频在线 | 在公交车上被JB草坏了被轮J了 | 国产精品色午夜视频免费看 | 精品亚洲欧美中文字幕在线看 | 成激人情在线影院920 | 国产人人为我我为人人澡 | 人妻熟妇乱又伦精品视频中文字幕 | good神马电影伦理午夜 | 中文字幕人成乱码熟女APP | 国产亚洲精品免费视频 | 秋霞午夜鲁丝片午夜精品久 | 国产亚洲精品久久精品录音 | 最近日本MV字幕免费观看在线 | 欧美最猛黑人AAAAA片 | 国产女人与黑人在线播放 | 三级网址在线 | 浪荡受自我调教纯肉BL | 娇妻在床上迎合男人 | 伊人久久大香线蕉综合网站 |