青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Bugs

MMORPG game develop.

[引用]More Effective C++ 條款15


條款15:了解異常處理的系統(tǒng)開銷


為了在運(yùn)行時處理異常,程序要記錄大量的信息。無論執(zhí)行到什么地方,程序都必須能夠識別出如果在此處拋出異常的話,將要被釋放哪一個對象;程序必須知道每一個入口點,以便從try塊中退出;對于每一個try塊,他們都必須跟蹤與其相關(guān)的catch子句以及這些catch子句能夠捕獲的異常類型。這種信息的記錄不是沒有代價的。確保程序滿足異常規(guī)格不需要運(yùn)行時的比較(runtime comparisons),而且當(dāng)異常被拋出時也不用額外的開銷來釋放相關(guān)的對象和匹配正確的catch字句。但是異常處理確是有代價的,即使你沒有使用try,throw或catch關(guān)鍵字,你同樣得付出一些代價。


讓我們先從你不使用任何異常處理特性也要付出的代價談起。你需要空間建立數(shù)據(jù)結(jié)構(gòu)來跟蹤對象是否被完全構(gòu)造(constructed)(參加條款10),你也需要系統(tǒng)時間保持這些數(shù)據(jù)結(jié)構(gòu)不斷更新。這些開銷一般不是很大,但是當(dāng)采用不支持異常的方法編譯的程序一般比支持異常的程序運(yùn)行速度更快所占空間也更小。


在理論上,你不能對此進(jìn)行選擇:C++編譯器必須支持異常,也就是說,當(dāng)你不用異常處理時你不能讓編譯器生產(chǎn)商消除這方面的開銷,因為程序一般由多個獨(dú)立生成的目標(biāo)文件(object files)組成,只有一個目標(biāo)文件不進(jìn)行異常處理并不能代表其他目標(biāo)文件不進(jìn)行異常處理。而且即使組成可執(zhí)行文件的目標(biāo)文件都不進(jìn)行異常處理,那么還有它們所連接的程序庫呢?如果程序的任何部分使用了異常,其它部分必須也支持異常。否則在運(yùn)行時程序就不可能提供正確的異常處理。


不過這只是理論,實際上大部分支持異常的編譯器生產(chǎn)商都允許你自由控制是否在生成的代碼里包含進(jìn)支持異常的內(nèi)容。如果你知道你程序的任何部分都不使用try,throw或catch,并且你也知道所連接的程序庫也沒有使用try,throw或catch,你就可以采用不支持異常處理的方法進(jìn)行編譯,這可以縮小程序的尺寸和提高速度,否則你就得為一個不需要的特性而付出代價。隨著時間的推移,使用異處理的程序庫開始變得普遍了,上面這種方法將逐漸不能使用,但是根據(jù)目前的軟件開發(fā)情況來看,如果你已經(jīng)決定不使用任何的異常特性,那么采用不支持異常的方法編譯程序是一個性能優(yōu)化的合理方法。同樣這對于想避開異常的程序庫來說也是一個性能優(yōu)化的好方法,這能保證異常不會從客戶端程序傳遞進(jìn)程序庫里,不過同時這樣做也會妨礙客戶端程序重定義程序庫中聲明的虛擬函數(shù),并不允許有在客戶端定義的回調(diào)函數(shù)。


使用異常處理的第二個開銷來自于try塊,無論何時使用它,也就是無論何時你想能夠捕獲異常,那你都得為此付出代價。不同的編譯器實現(xiàn)try塊的方法不同,所以編譯器與編譯器間的開銷也不一樣。粗略地估計,如果你使用try塊,代碼的尺寸將增加5%-10%并且運(yùn)行速度也同比例減慢。這還是假設(shè)程序沒有拋出異常,我這里討論的只是在程序里使用try塊的開銷。為了減少開銷,你應(yīng)該避免使用無用的try塊。


編譯器為異常規(guī)格生成的代碼與它們?yōu)?span>try塊生成的代碼一樣多,所以一個異常規(guī)格一般花掉與try塊一樣多的系統(tǒng)開銷。什么?你說你認(rèn)為異常規(guī)格只是一個規(guī)格而已,你認(rèn)為它們不會產(chǎn)生代碼?那么好,現(xiàn)在你應(yīng)該對此有新的認(rèn)識了。


現(xiàn)在我們來到了問題的核心部分,看看拋出異常的開銷。事實上我們不用太關(guān)心這個問題,因為異常是很少見的,這種事件的發(fā)生往往被描述為exceptional(異常的,罕見的)。80-20規(guī)則(參見條款16)告訴我們這樣的事件不會對整個程序的性能造成太大的影響。但是我知道你仍舊好奇地想知道如果拋出一個異常到底會有多大的開銷,答案是這可能會比較大。與一個正常的函數(shù)返回相比,通過拋出異常從函數(shù)里返回可能會慢三個數(shù)量級。這個開銷很大。但是僅僅當(dāng)你拋出異常時才會有這個開銷,一般不會發(fā)生。但是如果你用異常表示一個比較普遍的狀況,例如完成對數(shù)據(jù)結(jié)構(gòu)的遍歷或結(jié)束一個循環(huán),那你必須重新予以考慮。

posted on 2008-03-27 17:06 Bugs 閱讀(1014) 評論(4)  編輯 收藏 引用

評論

# re: [引用]More Effective C++ 條款15 2008-03-27 17:14 Bugs

我自己對異常處理的心得有下列幾點,僅供參考,希望大家說說各自的意見。
1.盡量避免使用異常處理,能不能則不用,可以用C Style的Error處理方式來代替。(對于渴望性能很實用)
2.即使要使用,也一定把Scope降到最低,盡量減少多重嵌套。
3.如果整個生產(chǎn)系統(tǒng)使用了不穩(wěn)定的第三方庫,建議使用異常處理,畢竟服務(wù)器穩(wěn)定勝于性能。  回復(fù)  更多評論   

# re: [引用]More Effective C++ 條款15 2008-03-31 22:41 Fox

對異常處理沒有特別關(guān)注過,搬著板凳先看到  回復(fù)  更多評論   

# re: [引用]More Effective C++ 條款15 2008-04-01 15:11 酷勤網(wǎng)

哪里有這本書的網(wǎng)上譯文?  回復(fù)  更多評論   

# re: [引用]More Effective C++ 條款15 2008-04-03 13:58 Bugs

不知道,你去找找吧  回復(fù)  更多評論   


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            麻豆精品网站| 久久av二区| 欧美日韩一区精品| 美日韩精品免费| 老司机凹凸av亚洲导航| 久久精品91久久久久久再现| 欧美在线电影| 久久综合给合久久狠狠狠97色69| 午夜精品一区二区三区四区| 香蕉av777xxx色综合一区| 亚洲欧美成aⅴ人在线观看| 欧美在线亚洲在线| 欧美国产1区2区| 国产精品剧情在线亚洲| 精品成人在线观看| 亚洲一区免费网站| 久久久国产成人精品| 欧美日韩国产不卡| 国产精品日韩欧美大师| 又紧又大又爽精品一区二区| 亚洲精品免费一二三区| 亚洲欧美电影院| 亚洲伦伦在线| 久久综合亚州| 国产一区二区三区在线播放免费观看| 亚洲级视频在线观看免费1级| 午夜精品久久久久久久久久久久久| 欧美激情1区2区3区| 亚洲综合色自拍一区| 欧美午夜视频一区二区| 亚洲精品中文在线| 欧美 日韩 国产在线 | 黑丝一区二区| 亚洲一区图片| 亚洲午夜精品一区二区三区他趣| 欧美日韩专区在线| 亚洲一区综合| 在线中文字幕一区| 国产视频在线一区二区| 久久精品国产v日韩v亚洲| 性做久久久久久久免费看| 激情五月***国产精品| 巨乳诱惑日韩免费av| 蜜臀va亚洲va欧美va天堂| 日韩视频亚洲视频| 亚洲男人影院| 亚洲区中文字幕| 亚洲综合视频1区| 在线电影一区| 一二三区精品福利视频| 亚洲自拍偷拍一区| 激情五月***国产精品| 欧美成人精品| 国产亚洲成av人在线观看导航| 免费视频久久| 国内揄拍国内精品少妇国语| 亚洲国产1区| 国产精品女人久久久久久| 欧美高清一区| 激情亚洲网站| 先锋影院在线亚洲| 午夜视频一区二区| 欧美日韩视频在线一区二区| 另类亚洲自拍| 国产亚洲一区二区在线观看| 宅男噜噜噜66一区二区66| 激情国产一区二区| 欧美中文在线观看| 久久久久久有精品国产| 国产精品美女久久久久av超清| 亚洲剧情一区二区| 亚洲一区二区精品在线| 欧美视频一区二区三区…| 亚洲三级网站| 亚洲专区一区二区三区| 国产精品久久二区二区| 亚洲一区二区三区高清 | 亚洲欧洲日本国产| 久久免费高清| 亚洲福利在线视频| 亚洲深夜影院| 国产真实乱偷精品视频免| 先锋影音国产一区| 欧美国产乱视频| 亚洲乱码国产乱码精品精可以看| 久久国产日韩欧美| 国内揄拍国内精品少妇国语| 久久男女视频| 性欧美暴力猛交另类hd| 欧美电影资源| 欧美一区二区成人6969| 在线看成人片| 国产欧美一区二区三区在线老狼| 久久九九热re6这里有精品| 亚洲精品美女久久7777777| 欧美一区2区视频在线观看| 在线成人激情黄色| 国产精品综合| 欧美午夜一区二区| 免费久久99精品国产自在现线| 中日韩美女免费视频网址在线观看| 狂野欧美一区| 久久久久久亚洲综合影院红桃| 中文国产亚洲喷潮| 亚洲精品一区二区三区99| 国产一区二区三区直播精品电影 | 在线综合欧美| 亚洲精品久久在线| 欧美电影在线| 最新亚洲一区| 亚洲国产精品黑人久久久| 欧美成人亚洲成人日韩成人| 久久av二区| 久久久五月天| 免费在线亚洲欧美| 亚洲国产日韩美| 亚洲精品国产欧美| 亚洲乱码视频| 亚洲视频福利| 亚洲女同性videos| 亚洲天堂视频在线观看| 99精品视频免费全部在线| 亚洲欧洲日本一区二区三区| 一区二区视频免费完整版观看| 在线免费观看视频一区| 亚洲美女在线国产| 羞羞漫画18久久大片| 亚洲第一中文字幕| 在线综合亚洲| 麻豆精品传媒视频| 国产精品一区二区三区免费观看| 狠狠综合久久av一区二区老牛| 亚洲精品欧美精品| 久久蜜桃av一区精品变态类天堂| 久久网站免费| 亚洲欧美不卡| 欧美日韩免费一区二区三区| 国产日韩一区二区三区| 亚洲欧美国产va在线影院| 欧美黄色aaaa| 久久全国免费视频| 国产亚洲欧美日韩日本| 妖精成人www高清在线观看| 嫩草伊人久久精品少妇av杨幂| 亚洲午夜未删减在线观看| 欧美日韩国产成人精品| 亚洲国产女人aaa毛片在线| 久久久久免费视频| 久久成人久久爱| 好吊一区二区三区| 久久在线视频| 两个人的视频www国产精品| 极品日韩久久| 欧美精品一区二区三| 亚洲欧美日韩一区二区三区在线观看| 亚洲人成在线播放| 欧美视频一区二区| 欧美亚洲在线| 久久久综合网站| 亚洲免费成人av| 国产精品99久久久久久久久久久久| 欧美日韩一区二区在线视频| 另类尿喷潮videofree | 免费视频一区| 国产日韩欧美夫妻视频在线观看| 日韩一区二区精品葵司在线| 亚洲丰满少妇videoshd| 免费观看一级特黄欧美大片| 亚洲精选91| 久久久.com| 一区二区三区日韩欧美精品| 久久se精品一区二区| 亚洲综合不卡| 欧美日韩免费一区| 欧美激情a∨在线视频播放| 国产日韩一区在线| 亚洲视频一起| 亚洲欧美中文日韩v在线观看| 欧美激情视频网站| 欧美1区2区3区| 亚洲日本成人在线观看| 久久视频一区| 欧美xart系列高清| 亚洲黄色在线| 欧美二区视频| 久久九九国产| 亚洲高清视频的网址| 欧美激情偷拍| 欧美一区二区三区免费在线看| 久久亚洲美女| 日韩亚洲国产欧美| 国产日韩在线视频| 欧美不卡一区| 亚洲一区二区三区精品在线| 中日韩美女免费视频网站在线观看| 欧美午夜电影在线| 久久午夜精品一区二区| av不卡在线| 欧美激情一区三区| 久久激情久久|