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

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

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

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

如何提高C++性能的編程技術(shù)

汽車電子技術(shù) ? 來源:程序喵大人 ? 作者: 程序喵大人 ? 2023-02-21 13:56 ? 次閱讀

家好,我是程序喵。

最近看了一本書《提高C++性能的編程技術(shù)》,這本書內(nèi)容比較老,有些內(nèi)容不太適合現(xiàn)在的編譯器,但里面很多內(nèi)容還是值得我們學(xué)習(xí)的。

我這里整理出了自認(rèn)為有用的條目分享給大家,希望對(duì)大家有所幫助,想了解具體內(nèi)容的的朋友可以直接去看書哈。

我將這些內(nèi)容分為了三大類別:

  • 對(duì)象的創(chuàng)建與銷毀:主要介紹對(duì)象構(gòu)造與銷毀的代價(jià)和臨時(shí)對(duì)象那些事。
  • 函數(shù)調(diào)用:主要介紹內(nèi)聯(lián)和虛函數(shù)及模板相關(guān)的知識(shí)點(diǎn)。
  • 設(shè)計(jì):如何設(shè)計(jì)并編寫出更高效的代碼。

下面是正文,越下面的內(nèi)容越有用:

  • 對(duì)象的創(chuàng)建與銷毀:
    • C++中對(duì)象的定義會(huì)隱式的執(zhí)行構(gòu)造函數(shù)和析構(gòu)函數(shù),這是有開銷的,對(duì)象的生命周期不是無償?shù)?,至少?duì)象的創(chuàng)建和銷毀會(huì)消耗CPU周期。所以若非必要,不要隨便定義對(duì)象,要等到需要使用對(duì)象的地方再創(chuàng)建它。
    • 對(duì)象的創(chuàng)建或銷毀會(huì)觸發(fā)對(duì)父對(duì)象和成員對(duì)象的遞歸創(chuàng)建或銷毀,要當(dāng)心復(fù)雜層次中對(duì)象的復(fù)合使用。它們使得創(chuàng)建和銷毀的開銷更加高昂。
    • 對(duì)象的拷貝是有開銷的,很多時(shí)候可以減少拷貝,考慮按引用或者指針傳遞和返回對(duì)象。
    • RVO可以省去創(chuàng)建和銷毀局部對(duì)象的步驟,從而改善性能。
    • 臨時(shí)對(duì)象會(huì)以構(gòu)造函數(shù)和析構(gòu)函數(shù)的形式降低一半的性能。在可能是“+、-、*”或者“/”的地方,可以考慮使用=運(yùn)算符消除臨時(shí)對(duì)象。
    • 編譯器必須初始化被包含的成員對(duì)象之后再執(zhí)行構(gòu)造函數(shù)體。必須在初始化階段完成成員對(duì)象的創(chuàng)建。這可以降低隨后在構(gòu)造函數(shù)部分調(diào)用賦值操作符的開銷。在某些情況下,這樣也可以避免臨時(shí)對(duì)象的產(chǎn)生。
    • 將構(gòu)造函數(shù)聲明為explicit,可以避免隱式轉(zhuǎn)換,一般這塊都會(huì)被列為項(xiàng)目的編碼規(guī)范,不符合這個(gè)規(guī)范是過不了code review的。
  • 函數(shù)調(diào)用:
    • 絕大多數(shù)的性能優(yōu)化是靠?jī)?nèi)聯(lián)做到的。
    • 內(nèi)聯(lián)就是用方法的代碼來替換對(duì)方法的調(diào)用。(和宏是不是挺像)
    • 內(nèi)聯(lián)通過消除調(diào)用開銷來提升性能,并且允許進(jìn)行調(diào)用間優(yōu)化。
    • 內(nèi)聯(lián)也有缺點(diǎn),尤其是濫用的情況下。內(nèi)聯(lián)可能會(huì)使代碼量變大,而代碼量增多后會(huì)較原先出現(xiàn)更多的緩存失敗和頁面錯(cuò)誤。
    • 為什么說虛函數(shù)慢?虛函數(shù)的代價(jià)在于無法內(nèi)聯(lián)函數(shù)調(diào)用,因?yàn)檫@些調(diào)用是在運(yùn)行時(shí)動(dòng)態(tài)綁定的。唯一潛在的效率問題是從內(nèi)聯(lián)獲得的速度(如果可以內(nèi)聯(lián)的話)。
    • 模板比繼承提供更好的性能。它把對(duì)類型的解析提前到編譯期間,也可以認(rèn)為這是沒有成本的。
  • 設(shè)計(jì):
    • 軟件性能和靈活性之間存在一種基本的平衡,太靈活的設(shè)計(jì)一般性能都不太好,你的設(shè)計(jì)只需在當(dāng)前范圍之內(nèi)足夠靈活就可以了。在完成同樣的簡(jiǎn)單工作時(shí),char*有時(shí)可以比string對(duì)象更有效率。
    • 引用計(jì)數(shù)想必大家都知道,有些場(chǎng)景中沒必要使用引用計(jì)數(shù),使用的簡(jiǎn)單的非計(jì)數(shù)對(duì)象即可,但是有些情況下,引用計(jì)數(shù)是個(gè)非常有用且有效的設(shè)計(jì),尤其是在下述場(chǎng)景中:
      • 目標(biāo)對(duì)象是很大的資源消費(fèi)者。
      • 資源分配和釋放的代價(jià)很高。
      • 高度共享,好多對(duì)象共享同一資源
    • 最快的代碼是從不執(zhí)行的代碼,可做以下思考:
      • 你打算使用該計(jì)算結(jié)果嗎?不打算使用就別浪費(fèi)資源啦
      • 你現(xiàn)在需要該結(jié)果嗎?請(qǐng)?jiān)谡嬲枰臅r(shí)候再進(jìn)行計(jì)算。在一些執(zhí)行流程中有些結(jié)果永遠(yuǎn)不會(huì)被使用,因此不必過早地計(jì)算
      • 你是否已經(jīng)知道結(jié)果?那可以考慮結(jié)果重復(fù)使用,而不是每次都做計(jì)算
    • 有的時(shí)候可能無法繞開該計(jì)算,此時(shí)就必須完成它,那如何加快計(jì)算速度?可做
      以下思考:
      • 該計(jì)算是否過于通用?上面說過,沒必要過度設(shè)計(jì),滿足需求即可。
      • 有些情況下有些考慮使用庫調(diào)用,有些庫調(diào)用比較靈活,有些庫調(diào)用性能比較高,考慮使用高效的算法和數(shù)據(jù)結(jié)構(gòu)。
      • 盡量減少內(nèi)存管理,這些調(diào)用的代價(jià)比較高。
      • 80-20原則,如果考慮所有可能的輸入數(shù)據(jù),則可以發(fā)現(xiàn)20%的數(shù)據(jù)在80%時(shí)間里出現(xiàn)。因此,應(yīng)當(dāng)以犧牲其他不經(jīng)常出現(xiàn)的場(chǎng)景為代價(jià)來提高典型輸入的處理速度。
      • 緩存、RAM和磁盤訪問的速度差異很明顯,可能有10倍以上的差異。應(yīng)該多編寫緩存友好的代碼。
    • 有些計(jì)算只有在特定的if-else分支下才需要,所以沒必要過早計(jì)算,因?yàn)橛锌赡芩挠?jì)算結(jié)果不會(huì)被用到。
    • 定期清理不需要的代碼:大型軟件往往會(huì)變得錯(cuò)綜復(fù)雜,雜亂不堪?;靵y軟件的一大特點(diǎn)就是執(zhí)行失效代碼(那些曾經(jīng)用來實(shí)現(xiàn)某個(gè)目標(biāo),但現(xiàn)在已經(jīng)不需要的代碼)。定期清理失效和僵死代碼可以增強(qiáng)軟件性能,同時(shí)對(duì)于軟件也是一種維護(hù)。
    • 考慮利用多處理器
      • 將任務(wù)做分解:將大的任務(wù)分為小任務(wù),使線程并發(fā)地執(zhí)行這些小任務(wù)。
      • 縮小臨界區(qū):臨界區(qū)應(yīng)該只包含關(guān)鍵代碼,不直接操作共享資源的代碼不要放在臨界區(qū)內(nèi)。
      • 減小鎖粒度:不要用同樣的鎖來保護(hù)所有資源,除非這些資源是同時(shí)更新的。
      • 讀寫鎖:讀多寫少可以考慮使用讀寫鎖。
      • 偽共享:不要在類定義里把兩個(gè)使用頻度都很高的鎖放太靠近,它們共享同一個(gè)緩存行可能觸發(fā)緩存一致性風(fēng)暴。
      • 驚群現(xiàn)象:仔細(xì)分析您的鎖調(diào)用的特征。當(dāng)鎖被釋放時(shí),是所有的等待線程都被喚醒還是只喚醒一個(gè)線程?喚醒所有線程會(huì)威脅到應(yīng)用的可擴(kuò)展性。
    • 要使用的存儲(chǔ)器離處理器越遠(yuǎn),訪問所需的時(shí)間就越長(zhǎng)。離處理器最近的是寄存器,雖然容量很少,但是速度很快。對(duì)寄存器的優(yōu)化對(duì)程序的性能提升而言是極為有益的。
    • 上下文切換的開銷巨大,請(qǐng)盡量避免上下文切換。

打完收工。

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

    關(guān)注

    68

    文章

    10882

    瀏覽量

    212220
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4338

    瀏覽量

    62752
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2112

    瀏覽量

    73717
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Borland_C++_Builder高級(jí)編程技術(shù)

    Borland_C++_Builder高級(jí)編程技術(shù)
    發(fā)表于 08-17 14:32

    vga使用編程技術(shù)

    vga使用編程技術(shù)
    發(fā)表于 03-21 19:04

    急聘C++ /OPENGL/ matlab/安卓兼職技術(shù)

    因業(yè)務(wù)上漲,現(xiàn)大量急聘C++ /OPENGL/ matlab/安卓編程技術(shù)。想做兼職者Q我:740718010,在校研究生亦可!
    發(fā)表于 03-11 14:39

    經(jīng)典UML狀態(tài)圖實(shí)用C++設(shè)計(jì)嵌入式系統(tǒng)事件驅(qū)動(dòng)型編程技術(shù)資料分享

    UML狀態(tài)圖的實(shí)用C/C++設(shè)計(jì)嵌入式系統(tǒng)的事件驅(qū)動(dòng)編程技術(shù)第二版內(nèi)含國(guó)外版本和國(guó)內(nèi)翻譯版本
    發(fā)表于 04-24 14:34

    SQL編程技術(shù)的特點(diǎn)有哪些

    SQL編程技術(shù)可以有效的克服SQL語言實(shí)現(xiàn)復(fù)雜應(yīng)用方面的不足,提高應(yīng)用系統(tǒng)和數(shù)據(jù)管理系統(tǒng)間的互操作性。SQL的特點(diǎn)之一是在交互式和嵌入式二種不同的使用方式下, SQL的語法結(jié)構(gòu)基本上是一致的。嵌入式
    發(fā)表于 12-22 07:04

    c++程序設(shè)計(jì)語言(特別版)

    c++程序設(shè)計(jì)語言介紹了標(biāo)準(zhǔn)C++以及由C++所支持的關(guān)鍵性編程技術(shù)和設(shè)計(jì)技術(shù)。標(biāo)準(zhǔn)C++較以前
    發(fā)表于 09-05 15:28 ?0次下載

    C++面向?qū)ο蠖嗑€程編程 (pdf電子版)

    C++面向?qū)ο蠖嗑€程編程共分13章,全面講解構(gòu)建多線程架構(gòu)與增量多線程編程技術(shù)。第1章介紹了
    發(fā)表于 09-25 09:39 ?0次下載

    Visual C++ 6.0 高級(jí)編程 -下載

    Visual C++ 6.0 高級(jí)編程,免費(fèi)下載:全面介紹了Visual C++ 6.0的中高級(jí)編程技術(shù),其內(nèi)容主要有:內(nèi)存管理、高級(jí)圖形處理、使用Internet、創(chuàng)建多線程程序、創(chuàng)
    發(fā)表于 07-12 15:25 ?0次下載
    Visual <b class='flag-5'>C++</b> 6.0 高級(jí)<b class='flag-5'>編程</b> -下載

    Visual C++網(wǎng)絡(luò)高級(jí)編程_陳堅(jiān)

    本書在對(duì)Visual C++各種編程技術(shù)和TCP/IP進(jìn)行系統(tǒng)介紹的基礎(chǔ)上,重點(diǎn)講解網(wǎng)絡(luò)編程的高級(jí)應(yīng)用、使用技巧和難點(diǎn)。包括基本網(wǎng)絡(luò)編程技術(shù),Telnet協(xié)議的實(shí)現(xiàn),HTTP協(xié)議的實(shí)現(xiàn)
    發(fā)表于 08-26 15:19 ?0次下載
    Visual <b class='flag-5'>C++</b>網(wǎng)絡(luò)高級(jí)<b class='flag-5'>編程</b>_陳堅(jiān)

    Visual C++編程技術(shù)文檔

    Visual C++編程技術(shù)文檔!資料來源網(wǎng)絡(luò),如有侵權(quán),敬請(qǐng)見諒
    發(fā)表于 11-20 15:00 ?0次下載

    Visual C# 2005編程技術(shù)文檔

    Visual C# 2005編程技術(shù)文檔!資料來源網(wǎng)絡(luò),如有侵權(quán),敬請(qǐng)見諒
    發(fā)表于 11-20 14:50 ?0次下載

    Halcon9.0編程技術(shù)詳解

    Halcon9.0編程技術(shù)詳解Halcon9.0編程技術(shù)詳解
    發(fā)表于 12-22 15:20 ?0次下載

    實(shí)用編程技術(shù)c++編程思想》電子教材免費(fèi)下載

    以進(jìn)行基于過程的程序設(shè)計(jì),因而C++就適應(yīng)的問題規(guī)模而論,大小由之。C++不僅擁有計(jì)算機(jī)高效運(yùn)行的實(shí)用性特征,同時(shí)還致力于提高大規(guī)模程序的編程質(zhì)量與程序設(shè)計(jì)語言的問題描述能力。
    發(fā)表于 08-27 08:00 ?0次下載

    單片機(jī)原理與應(yīng)用及C51編程技術(shù)

    單片機(jī)原理與應(yīng)用及C51編程技術(shù)課件下載
    發(fā)表于 08-29 10:21 ?11次下載

    C語言的基本概念和編程技術(shù)

    電子發(fā)燒友網(wǎng)站提供《C語言的基本概念和編程技術(shù).pdf》資料免費(fèi)下載
    發(fā)表于 11-20 10:18 ?0次下載
    <b class='flag-5'>C</b>語言的基本概念和<b class='flag-5'>編程技術(shù)</b>
    主站蜘蛛池模板: 九九精品国产亚洲A片无码 | 大香伊人久久| 一二三四在线视频社区| 神马影院午夜伦理限级| 琪琪电影午夜理论片YY6080| 妈妈的朋友6未删减版完整在线| 狠狠色综合久久婷婷| 国产午夜一区二区三区免费视频| 高清无码色大片中文| no视频在线观看| 99精品国产在热| 中国女人内谢69xxxxxx直播| 亚洲一品AV片观看五月色婷婷| 亚洲mv在线观看| 亚洲AV无码乱码在线观看浪潮| 亚洲女初尝黑人巨磁链接| 亚洲二区电影| 在线色av| 2021乱码精品公司| 最近2019中文字幕免费| 在线日本v二区不卡| free俄罗斯性xxxxhd派对| xnxx18美女| 国产精品久久久久影院嫩草| 国产精品久久久久久久伊一| 精品国产精品人妻久久无码五月天| 国产视频成人| 巨黄的肉辣文np| 美丽的姑娘BD在线观看| 全黄H全肉细节文NP| 日韩免费精品视频| 色噜噜噜亚洲男人的天堂| 同桌别揉我奶了嗯啊| 午夜国产精品视频在线| 亚洲 欧美 日韩 精品 自拍| 亚洲免费一区| 在线亚洲专区中文字幕| 超熟女专门志| 国产人妻麻豆蜜桃色69| 精品无码久久久久久久久| 欧美深夜0000XXXX疯狂|