欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

總結(jié)c++性能優(yōu)化策略

 更新時(shí)間:2018年03月18日 16:42:05   作者:D_Guco  
在本篇文章中小編給大家總結(jié)了關(guān)于C++的性能優(yōu)化策略的相關(guān)知識(shí)點(diǎn),對(duì)此有興趣的朋友可以參考學(xué)習(xí)下。

1 關(guān)于繼承:不可否認(rèn)良好的抽象設(shè)計(jì)可以讓程序更清晰,代碼更看起來更好,但是她也是有損失的,在繼承體系中子類的創(chuàng)建會(huì)調(diào)用父類的構(gòu)造函數(shù),銷毀時(shí)會(huì)調(diào)用父類的析構(gòu)函數(shù),這種消耗會(huì)隨著繼承的深度直線上升,所以不要過度的抽象和繼承。

2 對(duì)象的復(fù)合:對(duì)象的復(fù)合和繼承很相似,當(dāng)一個(gè)對(duì)象包含其他對(duì)象構(gòu)造時(shí)也會(huì)引起額外的構(gòu)造。關(guān)于這點(diǎn)可能會(huì)有很多人不解,認(rèn)為這是不可避免的,舉個(gè)例子,你的一個(gè)對(duì)象中用到數(shù)組和字符串,你是選擇string和vector還是char* 和c系的數(shù)組呢,如果沒有用到c++stl庫提供的相關(guān)的高級(jí)用法,建議選擇后者。

3 構(gòu)造函數(shù):盡量用參數(shù)列表初始化代替參數(shù),避免值傳遞初始化。

4 變量延時(shí)定義:從c系轉(zhuǎn)過來的仍保留著c的習(xí)慣,在函數(shù)第一行先把所有用到的變量都定義好,但是c是沒有運(yùn)行時(shí)的消耗的,對(duì)于c++時(shí)不一樣的,對(duì)于c++對(duì)象的構(gòu)造和銷毀時(shí)有消耗的,如果有大量的對(duì)象只在某個(gè)if條件的一個(gè)分支中出現(xiàn),那就會(huì)有50%的情況這些消耗是可以避免的。對(duì)于這點(diǎn)在一個(gè)類中也是一樣的,如果成員中有成員只在某個(gè)時(shí)刻能用,就用指針代替,在構(gòu)造對(duì)象時(shí)初始化成空指針,避免構(gòu)造時(shí)調(diào)用他的構(gòu)造函數(shù)。

5 虛函數(shù):虛函數(shù)的底層實(shí)現(xiàn)是通過一個(gè)虛函數(shù)表來實(shí)現(xiàn)的,因此有虛函數(shù)的類構(gòu)造時(shí)必須先初始化虛函數(shù)表,函數(shù)調(diào)用時(shí)也必須先找到虛函數(shù)表,然后通過指針偏移找到相應(yīng)的函數(shù),并且如果虛繼承的存在會(huì)進(jìn)一步增長(zhǎng)這個(gè)過程,它是有運(yùn)行時(shí)消耗的,所以避免濫用虛函數(shù)和虛繼承,盡可能的用模版設(shè)計(jì)來代替虛繼承把運(yùn)行時(shí)的消耗提前到編譯期。

6 返回值優(yōu)化: 雖然c++編譯器會(huì)選擇性的進(jìn)行RVO優(yōu)化但是不是強(qiáng)制的,當(dāng)函數(shù)有多個(gè)返回語句并且返回不通名稱的對(duì)象,函數(shù)過于復(fù)雜,返回對(duì)象沒有定義拷貝構(gòu)造函數(shù)時(shí),rvo優(yōu)化是不會(huì)執(zhí)行的,所以當(dāng)函數(shù)返回一個(gè)很大的對(duì)象時(shí)在不確定rvo優(yōu)化會(huì)執(zhí)行時(shí),盡量避免值傳遞。

7 變量的定義:在定義變量時(shí)盡量避免類型的不匹配造成臨時(shí)變量的產(chǎn)生。

8 內(nèi)存管理:c++內(nèi)存管理的大權(quán)由我們自己掌握,對(duì)于項(xiàng)目中要頻繁申請(qǐng)和釋放的對(duì)象建議用簡(jiǎn)單的內(nèi)存池來管理,可以大大的降低頻繁申請(qǐng)和釋放內(nèi)存帶來的消耗。

9 善用內(nèi)聯(lián):內(nèi)聯(lián)函數(shù)不僅僅是簡(jiǎn)單的函數(shù)調(diào)用似的優(yōu)化,他還有一個(gè)最大的優(yōu)點(diǎn)就是,可以讓編譯期進(jìn)行進(jìn)行邊界代碼的運(yùn)行環(huán)境優(yōu)化,內(nèi)聯(lián)把代碼拷貝到執(zhí)行環(huán)境處避免了函數(shù)調(diào)用帶來的消耗,并且編譯期可以進(jìn)行正常的編譯優(yōu)化,而函數(shù)調(diào)用是不能實(shí)現(xiàn)的。

10 stl :記住一點(diǎn)stl不是唯一的選擇,有時(shí)候也不是最好的選擇,合理選擇stl善用stl算法。

11 緩存:對(duì)于多次使用的計(jì)算結(jié)果及時(shí)緩存,避免重復(fù)計(jì)算。

12 延時(shí)計(jì)算:對(duì)于不關(guān)心計(jì)算結(jié)果的計(jì)算過程盡量延時(shí)執(zhí)行或者異步去執(zhí)行。

13 多線程:盡可能的使用無鎖式多線程開發(fā),鎖是一個(gè)非常消耗性能的東西,保證數(shù)據(jù)同步的手段有很多,voalite,原子操作都可已實(shí)現(xiàn),如果迫不得已要盡量減少鎖的消耗,比如降低鎖的粒度,使用性能更高的鎖等等。

14 cpu緩存:合理的利用cpu cache可以極大的提高代碼的運(yùn)行效率,比如數(shù)組中以每列遍歷和每行遍歷的區(qū)別。當(dāng)然多線程環(huán)境下也要考慮它帶來的影響。

15 內(nèi)存對(duì)齊:在進(jìn)行網(wǎng)絡(luò)編程時(shí),最好對(duì)網(wǎng)絡(luò)中傳送的數(shù)據(jù)快進(jìn)行內(nèi)存補(bǔ)齊,加快網(wǎng)絡(luò)數(shù)據(jù)的讀區(qū)速度。

16 函數(shù)參數(shù):用const引用代替值傳遞,如果函數(shù)參數(shù)過多,可以用對(duì)象來打包參數(shù),減少參數(shù)過多帶來的性能消耗。

17 算法: 盡可能的優(yōu)化你的算法。

18 其他優(yōu)化方案:位運(yùn)算代替乘除法,前綴運(yùn)算符代替后綴運(yùn)算等等。

相關(guān)文章

  • VTK8.1?在?Qt5.9?環(huán)境下的配置編譯和安裝過程

    VTK8.1?在?Qt5.9?環(huán)境下的配置編譯和安裝過程

    為了實(shí)現(xiàn)realsense的PCL點(diǎn)云顯示,需要VTK支持。由于整個(gè)平臺(tái)在Qt環(huán)境實(shí)現(xiàn),VTK編譯為Qt插件。整個(gè)過程并不復(fù)雜,網(wǎng)上的文章大多不全,自己梳理了一下,分享出來,需要的朋友可以參考下
    2022-07-07
  • C++之IO類,文件輸入輸出,string流練習(xí)題

    C++之IO類,文件輸入輸出,string流練習(xí)題

    這篇文章主要介紹了C++實(shí)現(xiàn)IO類的幾道數(shù)組練習(xí)題,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C語言深入探究sizeof與整型數(shù)據(jù)存儲(chǔ)及數(shù)據(jù)類型取值范圍

    C語言深入探究sizeof與整型數(shù)據(jù)存儲(chǔ)及數(shù)據(jù)類型取值范圍

    在main函數(shù)中,sizeof是可以正常工作的,但是在自定義函數(shù)中就不可以了。所以本文將為大家詳細(xì)講解一下關(guān)鍵字sizeof、整型數(shù)據(jù)存儲(chǔ)深入、數(shù)據(jù)類型取值范圍深入
    2022-07-07
  • C語言實(shí)現(xiàn)輸入ascii碼,輸出對(duì)應(yīng)的字符方式

    C語言實(shí)現(xiàn)輸入ascii碼,輸出對(duì)應(yīng)的字符方式

    這篇文章主要介紹了C語言實(shí)現(xiàn)輸入ascii碼,輸出對(duì)應(yīng)的字符方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C++11系列學(xué)習(xí)之類型推導(dǎo)

    C++11系列學(xué)習(xí)之類型推導(dǎo)

    這篇文章主要介紹了C++11系列學(xué)習(xí)之類型推導(dǎo),文章基于C++的相關(guān)資料展開對(duì)主題的詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值需要的小伙伴可參考一下
    2022-04-04
  • C++使用泛型導(dǎo)致的膨脹問題

    C++使用泛型導(dǎo)致的膨脹問題

    這篇文章主要介紹了C++使用泛型導(dǎo)致的膨脹,智能家居主機(jī)的嵌入式平臺(tái)上使用C++進(jìn)行開發(fā)。FLASH存儲(chǔ)空間有限,這是必須要考慮的因素,一定要重視,下面我們一起進(jìn)入文章看看詳細(xì)內(nèi)容
    2021-11-11
  • C語言數(shù)據(jù)結(jié)構(gòu)線性表教程示例詳解

    C語言數(shù)據(jù)結(jié)構(gòu)線性表教程示例詳解

    這篇文章主要為大家介紹了C語言數(shù)據(jù)結(jié)構(gòu)線性表的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • OpenCV實(shí)現(xiàn)幀差法檢測(cè)運(yùn)動(dòng)目標(biāo)

    OpenCV實(shí)現(xiàn)幀差法檢測(cè)運(yùn)動(dòng)目標(biāo)

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)幀差法檢測(cè)運(yùn)動(dòng)目標(biāo),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++中的hpp文件及使用hpp文件的好處

    C++中的hpp文件及使用hpp文件的好處

    hpp文件是C++程序中一種特殊頭文件,它可以包含類的聲明和實(shí)現(xiàn),詳細(xì)介紹了使用hpp文件的好處及注意事項(xiàng),感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 直觀理解C語言中指向一位數(shù)組與二維數(shù)組的指針

    直觀理解C語言中指向一位數(shù)組與二維數(shù)組的指針

    這篇文章主要介紹了直觀理解C語言中指向一位數(shù)組與二維數(shù)組的指針,數(shù)組指針是C語言入門學(xué)習(xí)過程中的重點(diǎn)和難點(diǎn),需要的朋友可以參考下
    2016-05-05

最新評(píng)論