一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

服務器之家 - 編程語言 - C/C++ - 總結c++性能優化策略

總結c++性能優化策略

2021-06-22 13:51D_Guco C/C++

在本篇文章中小編給大家總結了關于C++的性能優化策略的相關知識點,對此有興趣的朋友可以參考學習下。

1 關于繼承:不可否認良好的抽象設計可以讓程序更清晰,代碼更看起來更好,但是她也是有損失的,在繼承體系中子類的創建會調用父類的構造函數,銷毀時會調用父類的析構函數,這種消耗會隨著繼承的深度直線上升,所以不要過度的抽象和繼承。

2 對象的復合:對象的復合和繼承很相似,當一個對象包含其他對象構造時也會引起額外的構造。關于這點可能會有很多人不解,認為這是不可避免的,舉個例子,你的一個對象中用到數組和字符串,你是選擇string和vector還是char* 和c系的數組呢,如果沒有用到c++stl庫提供的相關的高級用法,建議選擇后者。

3 構造函數:盡量用參數列表初始化代替參數,避免值傳遞初始化。

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

5 虛函數:虛函數的底層實現是通過一個虛函數表來實現的,因此有虛函數的類構造時必須先初始化虛函數表,函數調用時也必須先找到虛函數表,然后通過指針偏移找到相應的函數,并且如果虛繼承的存在會進一步增長這個過程,它是有運行時消耗的,所以避免濫用虛函數和虛繼承,盡可能的用模版設計來代替虛繼承把運行時的消耗提前到編譯期。

6 返回值優化 雖然c++編譯器會選擇性的進行RVO優化但是不是強制的,當函數有多個返回語句并且返回不通名稱的對象,函數過于復雜,返回對象沒有定義拷貝構造函數時,rvo優化是不會執行的,所以當函數返回一個很大的對象時在不確定rvo優化會執行時,盡量避免值傳遞。

7 變量的定義:在定義變量時盡量避免類型的不匹配造成臨時變量的產生。

8 內存管理:c++內存管理的大權由我們自己掌握,對于項目中要頻繁申請和釋放的對象建議用簡單的內存池來管理,可以大大的降低頻繁申請和釋放內存帶來的消耗。

9 善用內聯:內聯函數不僅僅是簡單的函數調用似的優化,他還有一個最大的優點就是,可以讓編譯期進行進行邊界代碼的運行環境優化,內聯把代碼拷貝到執行環境處避免了函數調用帶來的消耗,并且編譯期可以進行正常的編譯優化,而函數調用是不能實現的。

10 stl :記住一點stl不是唯一的選擇,有時候也不是最好的選擇,合理選擇stl善用stl算法。

11 緩存:對于多次使用的計算結果及時緩存,避免重復計算。

12 延時計算:對于不關心計算結果的計算過程盡量延時執行或者異步去執行。

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

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

15 內存對齊:在進行網絡編程時,最好對網絡中傳送的數據快進行內存補齊,加快網絡數據的讀區速度。

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

17 算法: 盡可能的優化你的算法。

18 其他優化方案:位運算代替乘除法,前綴運算符代替后綴運算等等。

原文鏈接:http://blog.csdn.net/D_Guco/article/details/75729259

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

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

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

    spring-go5642021-07-02
  • C/C++學習C++編程的必備軟件

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

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

    謝恩銘10102021-05-08
  • C/C++C++之重載 重定義與重寫用法詳解

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

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

    青山的青6062022-01-04
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

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

    xiaocaidayong8482021-08-20
  • C/C++C/C++經典實例之模擬計算器示例代碼

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

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

    jia150610152021-06-07
  • C/C++C語言中炫酷的文件操作實例詳解

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

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

    針眼_6702022-01-24
  • C/C++c++ 單線程實現同時監聽多個端口

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

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

    源之緣11542021-10-27
  • C/C++深入理解goto語句的替代實現方式分析

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

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

    C語言教程網7342020-12-03
主站蜘蛛池模板: 国产福利片在线 易阳 | 麻豆视频网 | 按摩院已婚妇女中文字幕 | 夫承子液by免费阅读 | 秋霞鲁丝影院久久人人综合 | 九九热在线视频观看这里只有精品 | 青青色在线| 欧美成人aa久久狼窝动画 | 猛吸奶水的老汉 | 亚洲色导航 | 亚洲成人贴图 | 紧身牛仔裤美女被啪啪久久网 | 91精品免费国产高清在线 | 黑人巨摘花第一次出血 | 美女脱了内裤打开腿让人羞羞软件 | 俄罗斯引擎首页进入 | 久久黄色录像 | 性满足久久久久久久久 | 天天综合亚洲 | 无限在线看免费视频大全 | 精品在线观看一区 | 欧美精品亚洲精品日韩1818 | 国产成人一区二区三区视频免费蜜 | 爱情岛永久成人免费网站 | 国产亚洲精品自在线亚洲情侣 | 成年美女黄网站色视频大全免费 | 免费观看欧美一级高清 | free chinese麻豆| 亚洲人影院 | 色老板免费在线观看 | 国产91精品久久久久久 | 成人天堂入口网站 | daring国家队在线观看樱花动漫 | 97精品国产高清在线看入口 | 免费港剧在线观看港剧 | 99在线视频免费 | 国产综合成人亚洲区 | 国产精品一级视频 | 午夜勾魂曲 | 精品久久久久久国产 | 国产伦精品一区二区三区女 |