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

Bugs

MMORPG game develop.

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


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


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


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


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


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


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


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


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

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

評(píng)論

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

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

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

對(duì)異常處理沒(méi)有特別關(guān)注過(guò),搬著板凳先看到  回復(fù)  更多評(píng)論   

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

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

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

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


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   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>
            一区二区日韩伦理片| 亚洲另类春色国产| 国产乱人伦精品一区二区| 最新热久久免费视频| 久久免费高清视频| 亚洲欧美日韩高清| 亚洲精品国产精品久久清纯直播| 国内久久精品视频| 欧美日韩亚洲在线| 欧美精品电影| 欧美日韩国产成人在线91| 蜜臀av在线播放一区二区三区| 欧美一级淫片aaaaaaa视频| 亚洲欧美另类国产| 国产精品一区二区a| 免费精品99久久国产综合精品| 久久久久久久综合| 欧美华人在线视频| 欧美精品色综合| 国产精品高精视频免费| 国产精品入口夜色视频大尺度 | 亚洲国产精品一区二区www| 欧美丰满高潮xxxx喷水动漫| 日韩视频在线你懂得| 欧美亚洲一区| 欧美黄色成人网| 在线精品国产成人综合| 午夜影院日韩| 一区二区三区毛片| 欧美日韩dvd在线观看| 精品999日本| 久久国产一区二区| 亚洲欧美日本精品| 国产欧美91| 欧美在线观看视频在线| 亚洲欧洲在线一区| 亚洲欧美日韩一区| 欧美色一级片| 午夜精品成人在线| 亚洲美女视频在线免费观看| 欧美视频精品一区| 欧美精品18videos性欧美| 好看的av在线不卡观看| 欧美小视频在线观看| 欧美久久视频| 欧美日韩一二三四五区| 国产精品久久久久久av下载红粉| 久久国产精品一区二区| 久久国产高清| 女女同性女同一区二区三区91| 亚洲综合好骚| 巨胸喷奶水www久久久免费动漫| 欧美大片免费久久精品三p| 欧美日在线观看| 久久国产一区| 亚洲高清资源| 国产日韩一区欧美| 欧美精品国产一区| 一区二区三区四区五区视频| 99精品热6080yy久久| 亚洲高清色综合| 一区二区三区四区在线| 欧美sm重口味系列视频在线观看| 亚洲人成网站色ww在线 | 在线精品视频一区二区三四| 欧美日本精品在线| 欧美精品二区| 91久久国产综合久久蜜月精品| 久久精品最新地址| 国产精品久久久久久妇女6080| 亚洲视频免费| 久久av一区二区三区漫画| 国产精品一区二区视频 | 欧美风情在线观看| 亚洲精品裸体| 欧美日韩在线一区二区| 国产亚洲成av人片在线观看桃| 亚洲欧美精品一区| 午夜精品视频在线观看一区二区| 国产一区二区电影在线观看| 久久国产色av| 欧美国产在线视频| 欧美亚洲网站| 日韩午夜免费| 欧美精品日韩综合在线| 欧美一区视频| 久久精品二区| 久久婷婷国产综合精品青草| 亚洲精品一区在线观看香蕉| 欧美日韩性视频在线| av成人手机在线| 欧美福利影院| 久久综合久久综合这里只有精品 | 日韩午夜电影av| 在线观看国产欧美| 免费久久99精品国产自| 午夜视频一区二区| 正在播放亚洲| 久久久久国产精品午夜一区| 久久综合999| 亚洲一区日韩| 久久综合五月| 欧美韩国一区| 久久综合久久综合久久| 亚洲精品视频一区| 在线观看欧美一区| 美国成人毛片| 亚洲高清在线观看| 亚洲欧洲一区二区三区| 久久精品国产成人| 欧美中文字幕| 在线不卡中文字幕播放| 亚洲永久免费av| 免费看成人av| 久久嫩草精品久久久精品| 一区二区高清在线观看| 亚洲三级免费| 最新国产の精品合集bt伙计| 国产午夜精品福利 | 亚洲欧美激情在线视频| 一区二区日韩伦理片| 亚洲三级影院| 亚洲欧美激情精品一区二区| 一本色道久久加勒比88综合| 亚洲第一网站| 夜夜精品视频一区二区| 亚洲伊人网站| 久久精品中文字幕免费mv| 欧美a级大片| 一本久道综合久久精品| 欧美一区二区三区免费视频| 巨胸喷奶水www久久久免费动漫| 久久一区二区三区超碰国产精品| 欧美日本不卡高清| 国产揄拍国内精品对白| 日韩视频精品| 美女国产一区| 午夜精品久久久久久| 猛男gaygay欧美视频| 国产精品人人爽人人做我的可爱 | 亚洲精品韩国| 午夜精品久久久久久久99樱桃| 久久九九热免费视频| 国产精品高潮久久| 亚洲欧美三级在线| 999亚洲国产精| 欧美精品v日韩精品v韩国精品v | 一本色道久久综合亚洲精品婷婷| 午夜宅男欧美| 国产精品自在线| 欧美一区免费视频| 午夜在线视频观看日韩17c| 国产精品丝袜xxxxxxx| 亚洲一区二区三区四区视频| 91久久精品国产91久久| 欧美国产欧美综合| 亚洲无玛一区| 午夜精品久久久久久久久| 国产亚洲一区二区三区在线播放| 亚洲欧美影院| 久久久久久久久伊人| 亚洲人体1000| 在线一区二区三区做爰视频网站 | 久久久久久久网站| 免费看av成人| 亚洲一区二区黄| 久久精品道一区二区三区| **性色生活片久久毛片| 最新国产成人在线观看| 国产精品ⅴa在线观看h| 久久av资源网站| 久热re这里精品视频在线6| 在线亚洲欧美| 久久国产主播精品| 亚洲天堂av电影| 久久夜色精品国产亚洲aⅴ| 久久一二三国产| 久久国产欧美精品| 欧美日韩爆操| 麻豆久久婷婷| 国产精品毛片a∨一区二区三区|国 | 久久精品国产综合精品| 欧美精品1区| 欧美激情欧美激情在线五月| 国产精品久久久久aaaa| 亚洲九九爱视频| 亚洲精品久久久久久久久久久久久| 99国产欧美久久久精品| 亚洲人精品午夜| 免费av成人在线| 欧美制服丝袜第一页| 国产精品国产三级国产aⅴ入口| 亚洲成在线观看| 最新国产成人在线观看| 老司机一区二区三区| 久热re这里精品视频在线6| 一区二区在线观看视频| 久久久久久电影| 欧美激情精品久久久久久久变态| 国产午夜精品久久|