中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++的優化有哪些

發布時間:2021-10-19 15:40:50 來源:億速云 閱讀:133 作者:iii 欄目:編程語言

這篇文章主要講解了“C++的優化有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++的優化有哪些”吧!

1. 性能指標要靠測量,不能靠猜:

我做過一段時間的SDK開發工作,每當我們發版SDK時候,都要附帶著SDK使用文檔以及性能測試報告,性能測試報告里面有很詳細的指標測試數據,這個數據當然不能是自己猜測出來的,一定要進行測試。

2. 帕累托法則

帕累托法則,也稱二八原則,80%的執行時間花在大約20%代碼身上,80%的內存被大約20%的代碼使用,80%的維護成本花在20%的代碼上面。我們做程序優化也是如此,多數情況下也許我們只需要找到那20%代碼,對其進行深度優化,基本上就可以滿足性能要求。

3. 阿姆達爾定律

SPRING

阿姆達爾定律:有一個公式,公式中:St表示優化后整體性能提升的比例,P表示被優化部分運行時間占總運行時間的比例,Sp表示被優化部分性能提升的比例。

C++的優化有哪些

舉個例子:

1.  程序運行時間100s,其中有90s調用函數func,func優化后性能提升30%,即P=90/100=0.9,Sp=1+30%=1.3,則程序整體效率為St=1/((1-0.9)+0.9/1.3)=1.26214,程序整體性能提升了26%。

2.  程序運行時間100s,其中有10s調用函數func,func優化后性能提升80%,即P=10/100=0.1,Sp=1+80%=1.8,則程序整體效率為St=1/((1-0.1)+0.1/1.8)=1.04651,程序整體性能提升了4%。

該定律其實也間接驗證了帕累托法則的正確性,去優化那些至關重要的部分吧。

聊完了性能優化的原則,再來說下我的優化系列規劃吧,目前打算優化大體分為以下幾個專題:

1. 測量分析專題:例如使用什么函數來測量函數耗時,使用什么代碼分析工具來動態和靜態的分析代碼。例如:

C++的優化有哪些

2.  編碼規范專題:分析C++各種操作的效率,包括不同類型變量的存儲效率,使用智能指針、循環、函數參數、虛函數、數組等的效率,以及如何更好的利用他們進行代碼優化。例如各個操作占用的時鐘周期:

C++的優化有哪些

3.  編譯優化專題:各種編譯器性能分析,理解常見的編譯優化選項,分析編譯器是如何對代碼進行優化的,都做了什么優化,以及編譯器優化的障礙(它不能做什么),如何充分利用好編譯器的優化選項。例如優化編譯器優化級別介紹:

O0(默認選項):不開啟優化,方便功能調試

Og:方便調試的優化選項(比O1更保守)

O1:保守的優化選項,打開了四十多個優化選項

Os:產生較小代碼體積的優化選項(比O2更保守)

O2:常用的發布優化選項,在O1的基礎上額外打開了四十多個優化選項,包括自動內聯等規則

O3:較為激進的優化選項(對錯誤編碼容忍度最低),在O2的基礎上額外打開了十多個優化選項

Ofast:打開可導致不符合IEEE浮點數等標準的性能優化選項。

如圖:

C++的優化有哪些

4.  內存優化專題:內存使用情況往往是影響程序性能的關鍵因素,該專題會介紹如何有效利用緩存,如何操作緩存,優化內存訪問速度,如何使用更少的內存,如何防止內存抖動,內存對齊等等。

5. 多線程優化專題:如何充分利用CPU,如何做好線程同步,如何使用鎖,使用什么鎖,理解和調試上下文切換,如何使關鍵線程運行效率更高等等。

6. 亂序執行專題:理解CPU的亂序執行策略,如何利用此特性寫出高效代碼。

7. 矢量運算專題:理解CPU的矢量運算以及各種指令集、寄存器以及內置函數,提高數據計算的效率。

8.  特殊的優化編碼技巧:這里會介紹很多高效的編碼技巧,如何降低分支預測率,如何優化低效的除法操作,如何更好的進行數據邊界檢查,介紹一些高效的數學函數庫等等。

9.模板元編程的編碼技巧:如何利用模板編程來優化程序運行效率。

10.大雜燴:其它一些實用小技巧。

介紹到這里,向大家推薦個好用的網站鏈接,第一個是:https://godbolt.org/

C++的優化有哪些

點擊查看高清圖片

如圖,輸入C++代碼,在右半部分會顯示編譯器編譯后的匯編代碼,通過查看高級語言背后的匯編指令我們可以更好的分析代碼的性能。網站更強大的功能是它支持市面上幾乎所有的編譯器,而且各個版本都有。

C++的優化有哪些

如圖,該網站右半部分會展示編譯器眼中的代碼,對于我們分析程序也有很大幫助。

感謝各位的閱讀,以上就是“C++的優化有哪些”的內容了,經過本文的學習后,相信大家對C++的優化有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

晴隆县| 济阳县| 巫山县| 海伦市| 布尔津县| 龙南县| 防城港市| 奉化市| 新沂市| 吕梁市| 潞城市| 石河子市| 五华县| 北海市| 金沙县| 琼结县| 龙岩市| 舞阳县| 永善县| 宜城市| 安化县| 青阳县| 锦屏县| 同仁县| 宁城县| 习水县| 襄樊市| 昌黎县| 房产| 托克托县| 南昌市| 大石桥市| 宕昌县| 淮安市| 承德市| 丰原市| 德化县| 浮山县| 旬阳县| 新泰市| 商河县|