激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++ 內聯函數inline案例詳解

C++ 內聯函數inline案例詳解

2021-12-27 15:21xusong C/C++

這篇文章主要介紹了C++ 內聯函數inline案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

使用函數能夠避免將相同代碼重寫多次的麻煩,還能減少可執行程序的體積,但也會帶來程序運行時間上的開銷。

函數調用在執行時,首先要在棧中為形參和局部變量分配存儲空間,然后還要將實參的值復制給形參,接下來還要將函數的返回地址(該地址指明了函數執行結束后,程序應該回到哪里繼續執行)放入棧中,最后才跳轉到函數內部執行。這個過程是要耗費時間的。

另外,函數執行 return 語句返回時,需要從棧中回收形參和局部變量占用的存儲空間,然后從棧中取出返回地址,再跳轉到該地址繼續執行,這個過程也要耗費時間。

總之,使用函數調用語句和直接把函數中的代碼重新抄寫一遍相比,節省了人力,但是帶來了程序運行時間上的額外開銷。

一般情況下,這個開銷可以忽略不計。但是,如果一個函數內部沒有幾條語句,執行時間本來就非常短,那么這個函數調用產生的額外開銷和函數本身執行的時間相比,就顯得不能忽略了。假如這樣的函數在一個循環中被上千萬次地執行,函數調用導致的時間開銷可能就會使得程序運行明顯變慢。

作為特別注重程序執行效率,適合編寫底層系統軟件的高級程序設計語言,C++ 用 inline 關鍵字較好地解決了函數調用開銷的問題。

在 C++ 中,可以在定義函數時,在返回值類型前面加上 inline 關鍵字。如:

?
1
2
3
4
5
6
inline int Max (int a, int b)
{
    if(a >b)
        return a;
    return b;
}

增加了 inline 關鍵字的函數稱為“內聯函數”。內聯函數和普通函數的區別在于:當編譯器處理調用內聯函數的語句時,不會將該語句編譯成函數調用的指令,而是直接將整個函數體的代碼插人調用語句處,就像整個函數體在調用處被重寫了一遍一樣。

有了內聯函數,就能像調用一個函數那樣方便地重復使用一段代碼,而不需要付出執行函數調用的額外開銷。很顯然,使用內聯函數會使最終可執行程序的體積增加。以時間換取空間,或增加空間消耗來節省時間,這是計算機學科中常用的方法。

內聯函數中的代碼應該只是很簡單、執行很快的幾條語句。如果一個函數較為復雜,它執行的時間可能上萬倍于函數調用的額外開銷,那么將其作為內聯函數處理的結果是付出讓代碼體積增加不少的代價,卻只使速度提高了萬分之一,這顯然是不劃算的。

有時函數看上去很簡單,例如只有一個包含一兩條語句的循環,但該循環的執行次數可能很多,要消耗大量時間,那么這種情況也不適合將其實現為內聯函數。

另外,需要注意的是,調用內聯函數的語句前必須已經出現內聯函數的定義(即整個數體),而不能只出現內聯函數的聲明。

到此這篇關于C++ 內聯函數inline案例詳解的文章就介紹到這了,更多相關C++ 內聯函數inline內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:http://c.biancheng.net/view/199.html

延伸 · 閱讀

精彩推薦
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
主站蜘蛛池模板: 国产合集91合集久久日 | 亚洲电影免费观看高清完整版在线观 | 免费一级a毛片免费观看 | 91精品国产综合久久久欧美 | 日韩黄色精品视频 | 失禁高潮抽搐喷水h | 27xxoo无遮挡动态视频 | 午夜国产在线观看 | 97zyz成人免费视频 | 久草免费资源视频 | 免费国产成人高清在线看软件 | 日本成人一区 | 日韩中字幕 | 亚洲人成网在线观看 | 操操插插 | 精品一区二区三区中文字幕老牛 | 精品在线观看一区 | 国产亚洲美女精品久久久2020 | 视频一区免费观看 | av资源在线天堂 | 色阁五月| 欧美久久一区 | 毛片一区二区三区 | 黄色免费高清网站 | h视频免费看 | 亚洲一级片免费观看 | 久久久成人精品视频 | 国产精品视频海角社区88 | 一级网站| 亚洲免费高清 | 看国产毛片 | 国产精品视频一区二区噜噜 | 久草在线观看福利 | avav在线播放 | 国产一区网址 | 成码无人av片在线观看网站 | 一级黄色大片在线观看 | 欧美精品一区二区三区久久久 | 一级小毛片 | 亚洲电影免费观看高清完整版在线观 | 美女羞羞视频在线观看 |