偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

更高效的進(jìn)行C++優(yōu)化

開發(fā) 后端
下面文章詳細(xì)的對(duì)C++優(yōu)化問題做出了總結(jié)和研究,這些內(nèi)容都是一些門戶網(wǎng)站和技術(shù)論壇找到的,中間可能有不少錯(cuò)誤是我沒有挑出的,歡迎大家指正。

在進(jìn)行C++優(yōu)化之前,首先令人頭疼的問題是C++代碼在哪里,去尋找這些代碼之前還是先對(duì)debug-version進(jìn)行仔細(xì)的研究,因?yàn)閐ebug-version中包含了許多額外的代碼。。。。

一個(gè)debug-version可執(zhí)行體要比release-version大出40%。那些額外的代碼都是用來支持調(diào)試的,比如說符號(hào)的查找。大多數(shù)實(shí)現(xiàn)都為debug-version和release-version提供了不同的operator new以及庫(kù)函數(shù)。

而且,一個(gè)release-version的執(zhí)行體可能已經(jīng)通過多種途徑進(jìn)行了C++優(yōu)化,包括不必要的臨時(shí)對(duì)象的消除,循環(huán)展開,把對(duì)象移入寄存器,內(nèi)聯(lián)等等。 另外,我們要把調(diào)試和優(yōu)化區(qū)分開來,它們是在完成不同的任務(wù)。#t#

debug-version 是用來追捕bugs以及檢查程序是否有邏輯上的問題。release-version則是用來做一些性能上的調(diào)整以及進(jìn)行優(yōu)化。 下面就讓我們來看看有哪些代碼優(yōu)化技術(shù)吧:

聲明的放置
程序中變量和對(duì)象的聲明放在什么位置將會(huì)對(duì)性能產(chǎn)生顯著影響。同樣,對(duì)postfix和prefix運(yùn)算符的選擇也會(huì)影響性能。這一部分我們集中討論四個(gè)問題:初始化v.s 賦值,在程序確實(shí)要使用的地方放置聲明,構(gòu)造函數(shù)的初始化列表,prefix v.s postfix運(yùn)算符。

 (1) 請(qǐng)使用初始化而不是賦值
在C語(yǔ)言中只允許在一個(gè)函數(shù)體的開頭進(jìn)行變量的聲明,然而在C++中聲明可以出現(xiàn)在程序的任何位置。這樣做的目的是希望把對(duì)象的聲明拖延到確實(shí)要使用它的時(shí)候再進(jìn)行。這樣做可以有兩個(gè)好處:

1. 確保了對(duì)象在它被使用前不會(huì)被程序的其他部分惡意修改。如果對(duì)象在開頭就被聲明然而卻在20行以后才被使用的話,就不能做這樣的保證。
2. 使我們有機(jī)會(huì)通過用初始化取代賦值來達(dá)到性能的提升,從前聲明只能放在開頭,然而往往開始的時(shí)候我們還沒有獲得我們想要的值。

因此初始化所帶來的好處就無法被應(yīng)用。但是現(xiàn)在我們可以在我們獲得了想要的值的時(shí)候直接進(jìn)行初始化,從而省去了一步。注意,或許對(duì)于基本類型來說,初始化和賦值之間可能不會(huì)有什么差異。

但是對(duì)于用戶定義的類型來說,二者就會(huì)帶來顯著的不同,因?yàn)橘x值會(huì)多進(jìn)行一次函數(shù)調(diào)用----operator =。因此當(dāng)我們?cè)谫x值和初始化之間進(jìn)行選擇的話,初始化應(yīng)該是我們的首選。
(2) 把聲明放在合適的位置上
在一些場(chǎng)合,通過移動(dòng)聲明到合適的位置所帶來的性能提升應(yīng)該引起我們足夠的重視。例如:

  1. bool is_C_Needed();   
  2. void use()   
  3. {   
  4. C c1;   
  5. if (is_C_Needed() == false)   
  6. {   
  7. return; //c1 was not needed   
  8. }   
  9. //use c1 here   
  10. return;   
  11. }  

上面這段代碼中對(duì)象c1即使在有可能不使用它的情況下也會(huì)被創(chuàng)建,這樣我們就會(huì)為它付出不必要的花費(fèi),有可能你會(huì)說一個(gè)對(duì)象c1能浪費(fèi)多少時(shí)間,但是如果是這種情況呢:C c1[1000];我想就不是說浪費(fèi)就浪費(fèi)了。但C++優(yōu)化之后的情況:

  1. void use()   
  2. {   
  3. if (is_C_Needed() == false)   
  4. {   
  5. return; //c1 was not needed   
  6. }   
  7. C c1; //moved from the block's beginning   
  8. //use c1 here   
  9. return;   
  10. }  

怎么樣,程序的性能是不是已經(jīng)得到很大的改善了呢?因此請(qǐng)仔細(xì)分析你的代碼,把聲明放在合適的位置上,它所帶來的好處是你難以想象的。

【編輯推薦】

  1. 如何正確編寫C++項(xiàng)目開發(fā)編寫項(xiàng)目計(jì)劃書
  2. 對(duì)C++庫(kù)函數(shù)進(jìn)行學(xué)習(xí)探索總結(jié)筆記
  3. 深度演示C++語(yǔ)言的種種高安全性
  4. 詳細(xì)介紹如何準(zhǔn)確無誤的編寫C++語(yǔ)言
  5. 深度演示C++語(yǔ)言的種種高安全性
責(zé)任編輯:chenqingxiang 來源: CSDN
相關(guān)推薦

2009-12-08 16:22:06

WCF代碼

2024-12-31 00:00:15

2013-07-23 10:50:24

C程序

2016-09-18 20:19:01

LinuxVimGitHub

2021-12-10 11:46:33

無線網(wǎng)絡(luò)

2010-01-13 17:12:26

C++編譯器

2021-06-10 09:40:12

C++性能優(yōu)化Linux

2024-03-05 09:55:00

C++右值引用開發(fā)

2019-04-19 08:18:37

神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)圖形

2010-01-28 10:33:10

C++開發(fā)程序

2010-01-20 14:35:55

C++調(diào)用

2010-01-15 18:06:20

C++引用

2018-05-08 14:58:07

戴爾

2017-12-21 14:36:10

大數(shù)據(jù)健身智慧

2016-10-27 17:49:07

群暉群暉科技NAS

2010-01-20 09:32:30

C++類

2010-01-22 18:06:24

C++代碼

2010-01-25 14:43:00

C++構(gòu)造函數(shù)

2010-01-22 13:20:27

C++代碼

2010-01-22 15:53:55

C++轉(zhuǎn)換
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)