精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何分析和提高(C/C++)程序的編譯速度?

開發 后端
當我們遇到這樣情況的時候,是不是不知所措呢?怎么防止遇到這樣的情況呢,我們來分析一下程序加速的一些方法。

[[327635]]

當我們遇到這樣情況的時候,是不是不知所措呢?怎么防止遇到這樣的情況呢,我們來分析一下程序加速的一些方法。

硬件、編譯器造成的

使用好點的電腦無疑是一個操作上的最佳選擇,其次,對于編譯器也是可以編譯選項優化的,例如在VS環境中,可以通過配置屬性來實現,具體步驟如下,大家可以參考:https://blog.csdn.net/yizhou2010/article/details/52635288

代碼編寫風格

多使用自加、自減指令和復合賦值表達式

你覺得使用i++ ,i = i + 1,i += 1有區別嗎?我們來測試一下C代碼: 

  1. void asd() {}  
  2. int main() {  
  3.     int i=0 
  4.     i++;  
  5.     asd();  //方便區分上下文  
  6.     ii=i+1;  
  7.     asd();  
  8.     i+=1;  
  9.     return 0;  

反匯編: 

  1. mov     [rbp+i], 0    //i的初始化  
  2. add     [rbp+i], 1    //i++;  
  3. call    _Z3asdv         ; asd(void)  
  4. add     [rbp+i], 1    //ii=i+1;  
  5. call    _Z3asdv         ; asd(void)  
  6. add     [rbp+i], 1    //i+=1; 

我們看到這個結果是一樣的,但是在更加復雜的表達式中就會多生成幾個指令了,而且用 i += 1 的,總是比寫 i = i + 1的要稍微那么好看些。

除法換成乘法或者移位來表達

除法就是由乘法的過程逆推來的,依次減掉(如果x夠減的)y^(2^31),y^(2^30),...y^8,y^4,y^2,y^1。減掉相應數量的y就在結果加上相應的數量,一般來說,更耗時間一些,用一個demo來測試一下 

  1. auto time_start = std::chrono::system_clock::now();  
  2. int iCount = 100000 
  3. double k ;  
  4. for (int i = 0; i < 1000000; i++)  
  5.  
  6.      tmp = iCount / 2;  
  7.  
  8. std::chrono::duration<double> time_spend = std::chrono::system_clock::now() - time_start;  
  9. double test1 = time_spend.count() * 1000;  
  10. cout<<"test1 cost "<<time_cost<<" ms"<<endl 
  11. time_start = std::chrono::system_clock::now() ;  
  12. for (int i = 0; i < 1000000; i++)  
  13.  
  14.      tmp = iCount * 0.5f;  
  15. time_spend = std::chrono::system_clock::now() - time_start;  
  16. test2 = time_spend.count() * 1000;  
  17. cout<<"test2 cost "<<time_cost<<" ms"<<endl 
  18. time_start = std::chrono::system_clock::now() ;  
  19. for (int i = 0; i < 1000000; i++)  
  20.  
  21.      tmp = iCount >>1;  
  22.  
  23. time_spend = std::chrono::system_clock::now() - time_start;  
  24. test3 = time_spend.count() * 1000;  
  25. cout<<"test3 cost "<<time_cost<<" ms"<<endl

我們輸出結果會發現,移位和乘法比除法要省3-5倍時間,移位相對而言是最省時間的。

多用直接初始化,少用拷貝初始化 

  1. string s1 = "hiya";    // 拷貝初始化  
  2. string s2("hello");    // 直接初始化  
  3. string s3(10, 'c');    // 直接初始化 

當我們使用拷貝初始化時,我們要求編譯器將右側運算對象拷貝到正在創建的對象中,如果需要的話還要進行類型轉換,會浪費一定的資源時間,而直接初始化是要求編譯器使用普通的函數匹配來選擇與我們提供的參數最匹配的構造函數和拷貝構造函數。

我們來看看Primer中怎么說的

當用于類類型對象時,初始化的復制形式和直接形式有所不同:直接初始化直接調用與實參匹配的構造函數,復制初始化總是調用復制構造函數。復制初始化首先使用指定構造函數創建一個臨時對象,然后用復制構造函數將那個臨時對象復制到正在創建的對象”

還有一段說到:

通常直接初始化和復制初始化僅在低級別優化上存在差異,然而,對于不支持復制的類型,或者使用非explicit構造函數的時候,它們有本質區別:   

  1. ifstream file1("filename")://ok:direct initialization  
  2. ifstream file2 = "filename";//error:copy constructor is private 

局部變量、靜態局部變量、全局變量與靜態全局變量

  •  局部變量是存在于堆棧中的,對其空間的分配僅僅是修改一次esp寄存器的內容即可;
  •  靜態局部變量是定義在函數內部的,靜態局部變量定義時前面要加static關鍵字來標識,靜態局部變量所在的函數在多調用多次時,只有第一次才經歷變量定義和初始化;
  •  當一個文件或者數據反復使用時,應該存儲在全局變量中,避免重復加載使用;
  •  靜態全局變量是靜態存儲方式,靜態全局變量則限制了其作用域,即只在定義該變量的源文件內有效,在同一源程序的其它源文件中不能使用它。

靜態變量是低效的,當一塊數據被反復讀寫,其數據會留在CPU的一級緩存(Cache)中

代碼冗余度

避免大的循環,循環中避免判斷語句

在寫程序過程中,最影響代碼運行速度的往往都是循環語句,我記得當時在寫matlab的時候,處理大數據,都是禁止用循環的,特別是多層嵌套的循環語句。

其次,盡量將循環嵌套控制在 3 層以內,有研究數據表明,當循環嵌套超過 3 層,程序員對循環的理解能力會極大地降低。同時,這樣程序的執行效率也會很低。因此,如果代碼循環嵌套超過 3 層,建議重新設計循環或將循環內的代碼改寫成一個子函數。 

  1. for (i=0;i<100;i++)  
  2.  
  3.     for (j=0;j<5;j++)  
  4.     {  
  5.        for (j=0;j<5;j++)  
  6.         {  
  7.             /*處理代碼*/  
  8.         }  
  9.     }  

多重 for 循環中,如果有可能,應當盡量將最長的循環放在最內層,最短的循環放在最外層,以減少 CPU 跨切循環層的次數 

  1. for (i=0;i<100;i++)  
  2.  
  3.     for (j=0;j<5;j++)  
  4.     {  
  5.             /*處理代碼*/  
  6.     }  

改為: 

  1. for (j=0;j<5;j++)  
  2.  
  3.     for (i=0;i<100;i++)  
  4.     {  
  5.             /*處理代碼*/  
  6.     }  

邏輯判斷不要在循環中使用,當 for 循環的次數很大時,執行多余的判斷不僅會消耗系統的資源,而且會打斷循環“流水線”作業,使得編譯器不能對循環進行優化處理,降低程序的執行效率 

  1. if (condition)  
  2.  
  3.     for (i = 0;i < n;i++)  
  4.     {  
  5.         /*處理代碼*/  
  6.     }  
  7.  
  8. else  
  9.  
  10.     for (i = 0;i < n;i++)  
  11.     {  
  12.         /*處理代碼*/  
  13.     }  

盡量避免遞歸,遞歸就是不停的調用自身,所以非常消耗資源,甚至造成堆棧溢出和程序崩潰等等問題! 

  1. int Func(int n)  
  2.  
  3. if(n < 2 
  4. return 1;  
  5. else  
  6. return n*Func(n-1);  

因此,掌握循環優化的各種實用技術是提高程序效率的利器,也是一個高水平程序必須具備的基本功。

盡量不使用繼承和多重繼承

多重繼承增加了類的繼承層次的復雜性,調試難度增加當然風險也增加了,而且使用父類指針指向子類對象變成了一件復雜的事情,得用到C++中提供的dynamic_cast來執行強制轉換。但是dynamic_cast是在運行期間而非編譯期間進行轉換的,因此會會帶來一些輕微的性能損失,建議類型轉換盡量采用c++內置的類型轉換函數,而不要強行轉換

少用模板,因為模板是編譯期技術,大量采用模板也會增加編譯時間

在c++primer3中,有一句話:

在多個文件之間編譯相同的函數模板定義增加了不必要的編譯時間簡單點說,對于一個zhidaovector的函數,比如size(),如果在不同的cpp中出現,在這些文件編譯的時候都要把vector::size()編譯一遍。然后在鏈接的時候把重復的函數去掉,很顯然增加了編譯時間。模版函數需要在編譯的時候實例化zhidao,所以呢,不把模版的實現代碼放到頭文件中的話(在頭文件中實例化),那么每個使用到這個模版的cpp的都要把這個模版重新實例化一遍,所以增加了編內譯時間

編碼依賴性

聲明與實現分離,刪除不必要的#include

  •  使用include時,只需要include這個接口頭文件就好
  •  并不是所有的文件都需要包含頭文件 iostream,定義了輸出函數引用就好
  •  ostream頭文件也不要,替換為 iosfwd, 為什么,參數和返回類型只要前向聲明(forward declared )就可以編譯通過

盡量減少參數傳遞,多用引用來傳遞參數。 

  1. bool func1(string s1,  string s2)  
  2. bool func2(string *s1, string *s2)  
  3. bool func3(string &s1, string &s2) 

指針和引用都不會創建新的對象,函數func2和func3不需要調用析構和構造函數,函數func1使用值傳遞在參數傳遞和函數返回時,需要調用string的構造函數和析構函數兩次。

適當的采用PIMPL模式

很實用的一種基礎模式,通過一個私有的成員指針,將指針所指向的類的內部實現數據進行隱藏。將實現放到CPP里,主要作用在于編譯分離,其實是增加了編碼量以及初次編譯時長,增量編譯才體現作用。例如:指針的大小為(64位)或32(8位),X發生變化,指針大小卻不會改變,文件c.h也不需要重編譯。

未完待續

方法還有很多,比如使用多線程,多任務并行編譯,分布式編譯,預編譯等等,另外,在編譯大型項目時,分布式編譯更優,往往能夠大幅度提升性能。 

 

責任編輯:龐桂玉 來源: C語言與C++編程
相關推薦

2010-01-15 17:18:57

C++源程序

2011-05-24 16:03:30

C++編譯速度

2019-05-24 16:20:11

Python 開發編程語言

2010-01-28 10:33:10

C++開發程序

2010-01-13 18:44:03

C++編譯

2021-02-26 10:41:59

C++程序員代碼

2014-03-06 09:18:48

C++CIDE

2023-11-20 09:57:03

內聯函數C++

2010-01-22 13:20:27

C++代碼

2010-01-20 13:29:40

C++環境

2010-01-26 15:51:06

C++變量

2011-01-14 12:44:32

Linux PPCEclipseC

2010-01-27 15:46:15

學習C++效率

2009-04-10 13:57:50

C#C++Java

2010-01-28 17:14:38

Visual C++應

2011-04-11 09:43:25

C++C

2010-01-12 17:55:03

C++程序

2010-01-14 15:29:44

C++編譯器

2019-09-29 00:25:11

CC++內存泄漏

2014-09-19 10:46:36

LuaCC++
點贊
收藏

51CTO技術棧公眾號

日本中文不卡| 九色精品免费永久在线| 欧美美女性视频| 亚洲妇熟xxxx妇色黄| 豆国产96在线|亚洲| 91av在线精品| 精品国产视频一区二区三区| 久9re热视频这里只有精品| 色成人在线视频| 成人午夜免费剧场| 国产鲁鲁视频在线观看免费| 国产乱码精品一区二区三区av | 国产又爽又黄无码无遮挡在线观看| 九九热线视频只有这里最精品| 国产精品国产三级国产aⅴ入口| 国产成人精品一区二区三区福利| 久久久免费高清视频| 999久久久免费精品国产| 欧美成人激情免费网| 成人羞羞国产免费网站| 四虎影院观看视频在线观看| 久久精品视频一区| 国产91视觉| 91女人18毛片水多国产| 国产精品久久久亚洲一区| 日韩视频在线免费| 国产激情视频网站| 国产精品一区二区精品视频观看| 欧美性xxxx| 亚洲精品少妇一区二区| 成人高清免费观看mv| 成人白浆超碰人人人人| 成人久久久久久| 国产精品熟女视频| 99成人在线| 久久国产精品电影| 91成人精品一区二区| 玖玖玖免费嫩草在线影院一区| 欧美精品tushy高清| 成人在线观看你懂的| a级在线观看| 国产精品国产三级国产三级人妇| 欧美日韩日本网| 成人精品在线播放| 国产乱人伦精品一区二区在线观看| 国产精品免费久久久| 人妻 日韩精品 中文字幕| 亚洲一级二级| 欧美美女操人视频| 在线观看亚洲网站| 成人3d精品动漫精品一二三| 精品亚洲永久免费精品| 日本一级片在线播放| 亚洲码欧美码一区二区三区| 91精品久久久久久久久99蜜臂| 我要看一级黄色大片| 99riav视频一区二区| 欧美亚洲愉拍一区二区| 久久久精品三级| 国产精成人品2018| 欧美撒尿777hd撒尿| 亚洲xxxx2d动漫1| 91国产精品| 91精品国产高清一区二区三区蜜臀| 手机在线视频一区| 国产专区精品| 亚洲精品一区二区三区四区高清| 中文字幕天堂网| 欧美女优在线视频| 色多多国产成人永久免费网站| 狂野欧美性猛交| 久久久久蜜桃| 欧美激情视频在线免费观看 欧美视频免费一| 精品国产大片大片大片| 国产高清一区| 欧美巨乳美女视频| 国产网站在线看| 午夜一区二区三区不卡视频| 日本午夜精品理论片a级appf发布| 69视频免费在线观看| 久久永久免费| 国产欧美日韩中文字幕| 国产免费黄色大片| 成人精品在线视频观看| 玛丽玛丽电影原版免费观看1977| 男人的天堂在线| 国产精品久久久久影视| 四虎4hu永久免费入口| av在线最新| 色系网站成人免费| 999热精品视频| 欧美freesex8一10精品| 伊人青青综合网站| 欧美丰满艳妇bbwbbw| 国产亚洲高清视频| 成人精品视频久久久久| 日本精品一区二区在线观看| 久久精品视频免费| 欧美一级黄色录像片| 草草在线视频| 欧美日韩亚州综合| 中文字幕第九页| 精品日韩免费| 午夜精品www| 中文字幕人妻一区二区三区视频| 成人一区二区三区在线观看| 日韩av电影在线观看| 欧美大胆的人体xxxx| 欧美性xxxxx极品少妇| 天堂va欧美va亚洲va老司机| 成人在线免费观看91| 午夜精品视频网站| 国产精品无码久久久久成人app| 99精品视频一区二区三区| 中文字幕乱码一区二区三区| 中文字幕在线直播| 亚洲精品一区二区三区99| 激情高潮到大叫狂喷水| 噜噜噜在线观看免费视频日韩 | 女人丝袜激情亚洲| 欧美人在线观看| 亚洲综合网av| 久久久久久久综合日本| 国产伦精品一区二区三区四区视频_ | 亚洲丝袜精品丝袜在线| 成人性视频欧美一区二区三区| 丁香5月婷婷久久| 不卡av在线播放| 中文字幕乱码人妻二区三区| 91一区二区在线观看| 一二三在线视频| 日韩免费在线电影| 中文字幕一区电影| 波多野结衣理论片| 2022国产精品视频| 国产69精品久久久久999小说| 国产精品日本一区二区不卡视频| 日韩三级成人av网| 国产美女www爽爽爽| 久久久久久久久久久电影| 国产91美女视频| 日韩激情啪啪| 秋霞av国产精品一区| 天天色综合av| 精品免费在线观看| 中文字幕 亚洲一区| 亚洲人成高清| 精品乱子伦一区二区三区| 成人爽a毛片免费啪啪动漫| 日韩天堂在线观看| 久久一级黄色片| jvid福利写真一区二区三区| 国产午夜福利100集发布| 久久中文资源| 日韩av片电影专区| 啊v视频在线| 5566中文字幕一区二区电影| 熟女少妇a性色生活片毛片| 狠狠色综合色综合网络| 一道本在线观看视频| 日韩免费一级| 欧美极品少妇xxxxⅹ喷水| 亚洲国产成人一区二区| 五月激情综合色| 免费在线观看你懂的| 石原莉奈在线亚洲二区| 亚洲国产精品久久久久婷婷老年| 日韩午夜视频在线| 久久躁狠狠躁夜夜爽| 性一交一乱一乱一视频| 午夜精品久久一牛影视| 巨胸大乳www视频免费观看| 日韩avvvv在线播放| 一本一道久久久a久久久精品91| 国产精品亚洲欧美一级在线| 久久久亚洲成人| 手机看片国产1024| 91福利在线观看| 欧美三级黄色大片| 成人97人人超碰人人99| 精品少妇无遮挡毛片| 国产精品成人a在线观看| 国产精品一区二区不卡视频| 户外露出一区二区三区| 久久亚洲影音av资源网| 视频一区二区在线播放| 欧美精品乱人伦久久久久久| 亚洲国产精品午夜在线观看| 国产午夜一区二区三区| 亚洲小说欧美另类社区| 国产一区在线免费| 卡通欧美亚洲| 久久精品国产精品| 风流少妇一区二区三区91| 一本久久a久久精品亚洲| 国产探花在线视频| 不卡的av网站| 一区二区三区免费播放| 欧美激情麻豆| 日韩欧美一区二区三区久久婷婷| 96sao精品免费视频观看| 久久免费国产精品1| 91美女视频在线| 亚洲激情视频在线播放| 亚洲一卡二卡在线观看| 性做久久久久久| 男人的午夜天堂| 国产精品久久久久久免费| 中文字幕亚洲区| 亚洲精品鲁一鲁一区二区三区| 久久亚洲美女| 亚洲精品视频在线| 中文字幕在线综合| 亚洲网站啪啪| 欧美h视频在线观看| 国产免费av一区二区三区| av一区二区三区四区电影| jizz欧美| 日本乱人伦a精品| 国产黄色大片在线观看| www.亚洲人.com| 国产一区二区影视| 亚洲黄色在线观看| 国产wwwxxx| 在线不卡中文字幕| 波多野结衣家庭主妇| 欧美日韩国产丝袜美女| 日操夜操天天操| 亚洲综合成人在线| 精品国产欧美日韩不卡在线观看| 国产日产欧美精品一区二区三区| 六十路息与子猛烈交尾| 成人性生交大片免费看视频在线| 亚洲天堂伊人网| 麻豆freexxxx性91精品| 国产精品视频黄色| 久久亚洲电影| 99久久久无码国产精品6| 一二三区精品| 国产精品又粗又长| 在线 亚洲欧美在线综合一区| 大片在线观看网站免费收看| 婷婷久久一区| 亚洲免费视频播放| 亚洲成人二区| 69精品丰满人妻无码视频a片| 亚洲国产老妈| 草草草视频在线观看| 欧美二区视频| 日韩中文字幕在线不卡| 亚洲性图久久| 可以在线看的av网站| 亚洲激情视频| 亚洲综合一二区| 免费视频网站www| 一级日本不卡的影视| 92看片淫黄大片欧美看国产片 | 玖玖玖视频精品| 成人日韩在线电影| 国模大尺度视频一区二区| 成人午夜黄色影院| 视频一区日韩| 国产精品一区二区三区四区五区| 噜噜噜天天躁狠狠躁夜夜精品| 久久久久国产精品视频| 精品产国自在拍| 一区二区三区四区视频在线| 影音先锋日韩精品| 青草青青在线视频| 首页欧美精品中文字幕| 爱爱爱爱免费视频| 国产精品99精品久久免费| 无码人妻一区二区三区在线| wwwwww.欧美系列| 永久免费毛片在线观看| 国产精品国产三级国产aⅴ原创| 日本精品人妻无码77777| 亚洲高清在线精品| 免费av中文字幕| 欧美一区日本一区韩国一区| 少妇一区二区三区四区| 一本一道久久a久久精品逆3p| 黄色网页在线观看| 2019中文在线观看| 美女久久久久久| 国产在线观看一区| 欧美日韩在线网站| 欧美日韩激情四射| 久久精品人人做人人爽电影蜜月| 欧美在线aaa| 成人丝袜18视频在线观看| 国产综合精品在线| 亚洲综合色在线| 日韩欧美一级大片| 精品久久久久久最新网址| 国产人成在线观看| 久久久久久999| 欧美黄色网络| 久精品国产欧美| 综合天堂久久久久久久| 99久久激情视频| 国产成人99久久亚洲综合精品| 欧美日韩高清丝袜| 亚洲亚洲精品在线观看| 伊人精品一区二区三区| 亚洲黄页网在线观看| 成人日批视频| 国产精品久久久久久久久借妻| 涩涩屋成人免费视频软件| 热舞福利精品大尺度视频| 欧美视频在线观看| 国产喷水theporn| 91视频观看免费| 久久久久香蕉视频| 欧美日韩国产高清一区| 日本午夜在线视频| 久久这里只精品最新地址| 国内精品在线观看视频| 国内精品国产三级国产a久久| 色一情一交一乱一区二区三区| 亚洲成av人影院| a天堂视频在线| 色婷婷综合成人av| 在线成人视屏| 欧美极品色图| 99精品视频网| 国产白袜脚足j棉袜在线观看| 亚洲天堂免费在线观看视频| 黄色av一区二区| 国产丝袜一区视频在线观看| caoprom在线| av激情久久| 午夜电影亚洲| aaaaaaaa毛片| 亚洲欧洲综合另类| 国产又黄又爽视频| 一区二区三区天堂av| 欧美xxx视频| 女人一区二区三区| 奶水喷射视频一区| 成年人网站免费在线观看| 午夜精品视频在线观看| 少妇高潮一区二区三区99小说| 欧美激情二区三区| 1204国产成人精品视频| 丁香婷婷综合激情| 成人免费高清视频在线观看| 免费在线观看国产精品| 日韩欧美一区二区三区在线| sm国产在线调教视频| 亚洲www视频| 在线中文一区| 日本一区二区免费视频| 亚洲综合成人在线视频| 日本精品久久久久| 国产91精品不卡视频| 亚洲欧洲免费| 婷婷丁香激情网| 国产精品高潮久久久久无| 一级黄色小视频| 欧美老女人xx| 大奶一区二区三区| 国产免费黄视频| 久久久久久久精| 亚洲无码精品国产| 毛片精品免费在线观看| 操欧美女人视频| 日韩欧美在线播放视频| 国产午夜亚洲精品羞羞网站| 中文在线免费观看| 久久这里有精品视频| xvideos.蜜桃一区二区| 99福利在线观看| 国产精品午夜电影| www.天天干.com| 欧美又大又粗又长| 91麻豆国产自产在线观看亚洲| 91网址在线观看精品| 亚洲国产精品久久一线不卡| 欧美人体大胆444www| 91麻豆国产精品| 国产精品久久国产愉拍| 日韩av片在线免费观看| 精品国产乱码久久久久久久久| 男人最爱成人网| 成人在线观看www| www国产精品av| 一级全黄少妇性色生活片| 九九久久久久99精品| 亚洲自拍电影| 中文字幕在线播放一区二区| 激情成人在线视频| 日韩精品黄色| 国产欧美日韩在线播放| 捆绑调教一区二区三区| 国产一级特黄a高潮片| 中文字幕视频在线免费欧美日韩综合在线看 | 国产韩日影视精品| 国产伦精品一区二区免费| 欧美日本一区二区三区四区|