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

asm, c, c++ are my all
-- Core In Computer
posts - 139,  comments - 123,  trackbacks - 0
一次關(guān)于旨在降低編譯時(shí)間的整改工作(vc++)
[轉(zhuǎn)自]天爬者


由于工程的文件的日益龐大和第3方庫(ACE Loki Boost等等)的使用增多
我所工作的項(xiàng)目系統(tǒng)構(gòu)建時(shí)間從最初的3分鐘變?yōu)楝F(xiàn)在的8分鐘
程序員的機(jī)器配置已經(jīng)很不錯(cuò)了,3。0 的主頻1g的內(nèi)存,但是常常由于一個(gè)小的修改導(dǎo)致5分鐘甚至更長的編譯時(shí)間來驗(yàn)證效果。

按照《Joel on software》的說法,其直接后果是可怕的:
程序員們?cè)谶@8分鐘內(nèi)無所事事,只有查看網(wǎng)頁,或者qqmsn,打斷先前的思路從他們的上下文環(huán)境里面脫離了出來,離開了“順勢工作時(shí)間”,等到他們編譯好了驗(yàn)證再修改的時(shí)候,他們又得花不少的時(shí)間來回到剛才的思路

“順勢工作時(shí)間”大致意思就是說2個(gè)不連續(xù)的半小時(shí)的效果遠(yuǎn)不如一個(gè)連續(xù)沉浸的1小時(shí)的工作效果,如果一個(gè)人不能連續(xù)沉浸的思考,那么他就很可能陷入在不停的上下文環(huán)境切換和淺表思考當(dāng)中。人的多線程處理和機(jī)器是一樣的環(huán)境的切換不能夠不考慮

所以,在當(dāng)前機(jī)器配置已經(jīng)沒有什么提升空間的情況下,我在項(xiàng)目組內(nèi)部組織了一次整改活動(dòng),旨在降低編譯構(gòu)建時(shí)間


1。目標(biāo):將完全重新編譯時(shí)間從8分鐘降低到4分鐘以下
2。原則:通過和主程序的溝通,并參考了《C++ coding Standards》出了一下幾條整改原則:
?????首先是關(guān)于include的,因?yàn)榘^文件相當(dāng)于將代碼復(fù)制到本文件來編譯,而頭文件又經(jīng)常是用來被別人包含的,所以工程文件多了,每個(gè)文件都有include鏈(包含的文件又include了其他文件),該鏈條不會(huì)止步于你工程,而會(huì)延伸到你所有使用的第3方庫里面

?????A.
能夠去掉的include就去掉。

?????B.能夠在cpp
里面include的頭文件不要在頭文件里面include。
?????
說明:盡量去掉每個(gè)cpp會(huì)被串起來的頭文件膨脹的機(jī)會(huì)

?????
C.能夠用前向聲明的就不要include,頭文件里面也是一樣
???? 說明:在頭文件里面用前向聲明然后保存指針或者引用,在具體實(shí)現(xiàn)的cpp里面再包含頭文件,雖然看起來和《C++ coding Standards》“
Make header files self-sufficient ”有些沖突(前兩天另外cppblog一位朋友講過 http://m.shnenglu.com/flyingxu/archive/2006/06/23/8908.html )但是在一些核心的.h(被很多類include的)里面作改造工作,還是能夠收到很大的降低編譯時(shí)間效果,而付出的代價(jià)就是原來只需要包含該頭文件就可以編譯成功的cpp需要額外包含一些頭文件。

舉個(gè)例子: Foo類頭文件使用了前向申明保存了A類和B類的指針或者引用為成員變量,在Foo類的cpp里面才包含A和B的頭文件,而當(dāng)C類需要使用Foo類時(shí)候包含F(xiàn)oo類的頭文件,但是操作中又需要調(diào)用A的成員函數(shù),C不同時(shí)包含A的頭文件的花就會(huì)出現(xiàn)編譯失敗。

雖然表面上是讓代碼更加復(fù)雜了,但是除卻帶來降低編譯時(shí)間的好處之外,代碼也在強(qiáng)迫你進(jìn)行解耦合,如果說你cpp里面需要包含的頭文件越多,說明你這個(gè)類需要知道的對(duì)象就越多,你可以乘機(jī)檢查一下自己的代碼又沒有不必要的耦合,為什么這個(gè)cpp需要知道那么多的本來可能屬于別的類的細(xì)節(jié).....

??????D。
把大多數(shù)模塊都要使用的庫文件或者穩(wěn)定類的頭文件include放到預(yù)編譯頭文件“stdafx.h”里面
??????
說明:由于預(yù)編譯頭文件里面include的內(nèi)容只會(huì)compile一次而被link多次,把一些常用類放到這里會(huì)降低很多編譯時(shí)間,但也不能亂來,要點(diǎn)在于 “大多數(shù)”和“穩(wěn)定”,如果一個(gè)頭文件經(jīng)常變化,他的一次小改動(dòng)都會(huì)引起整個(gè)工程rebuild,哪怕只是一個(gè)注釋,因?yàn)樗械腸pp文件都包含了stdafx.h而stdafx.h又包含了這個(gè)容易變動(dòng)的頭文件。
??????
??????
E.使用Pimpl慣用法
??????說明:關(guān)于Pimpl大家可以查下資料,《C++ coding Standards》里面也有講解,基本上就是采用一個(gè)私有的前向申明的stuct指針把所有protect成員都封裝起來起來.基本上是一個(gè)最終極的解決方案,但是對(duì)我們現(xiàn)有架構(gòu)改造太大,不敢全面實(shí)行,我們只選擇了數(shù)個(gè)最有價(jià)值的類進(jìn)行了改造,打算以后在其他項(xiàng)目里面再全面應(yīng)用。

3。實(shí)施: 通過半個(gè)小時(shí)的溝通,讓項(xiàng)目組程序員了解原則,并采取結(jié)隊(duì)修改的方式來降低引入新bug的風(fēng)險(xiǎn),在以通過原有單元測試用例的條件下,進(jìn)行修改-測試-提交的迭代。
???

4。結(jié)果:???編
譯時(shí)間降低到了6分鐘以內(nèi)。。。雖沒有達(dá)到預(yù)期,但也算有效果,沒有完全達(dá)標(biāo)的主要原因還是沒有完整的測試方案包括單元測試和驗(yàn)收測試,怕有些改動(dòng)過大影響系統(tǒng)健壯性,局部放棄了一些實(shí)施的原則。


把這個(gè)整改的工作寫出來,一方面作個(gè)記錄,另外一方面希望和大家討論,相互多多交流:)
posted on 2006-07-04 03:38 Jerry Cat 閱讀(535) 評(píng)論(1)  編輯 收藏 引用

FeedBack:
# re: 一次關(guān)于旨在降低編譯時(shí)間的整改工作(vc++)
2007-07-09 14:18 | NDD
上述措施只能在合理范圍內(nèi)解決rebuild時(shí)間長的問題

使用Distcc 或者 Incredibuild 增加計(jì)算能力可以克服文件的正常增加  回復(fù)  更多評(píng)論
  

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



<2006年7月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

常用鏈接

留言簿(7)

隨筆檔案

最新隨筆

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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| 亚洲深爱激情| 亚洲国产一区视频| 欧美日韩黄色大片| 欧美激情第4页| 国产婷婷色一区二区三区| 亚洲精品永久免费| 日韩一级不卡| 国产精品自拍一区| 欧美韩日高清| 久久久青草婷婷精品综合日韩| 国产欧美视频一区二区三区| 欧美精品久久久久久久免费观看| 亚洲日本欧美| 国产亚洲欧美一区| 欧美日韩午夜视频在线观看| 久久久久在线| 一道本一区二区| 在线看不卡av| 1769国产精品| 久热精品视频在线| 一色屋精品亚洲香蕉网站| 国产毛片精品国产一区二区三区| 久久久久国产一区二区| 亚洲精品孕妇| 亚洲国产精彩中文乱码av在线播放| 亚洲激情国产| 在线观看三级视频欧美| 国模叶桐国产精品一区| 国产精品草莓在线免费观看| 欧美日韩亚洲成人| 国产精品区一区二区三| 国产精品99免视看9| 欧美日韩亚洲综合| 欧美激情精品久久久久久黑人 | 含羞草久久爱69一区| 亚洲欧洲在线看| 国产精品一区在线播放| 欧美视频在线免费看| 欧美国产极速在线| 欧美日韩人人澡狠狠躁视频| 欧美日韩国产美女| 国产伦精品一区二区三区高清版| 国产精品一卡| 亚洲美女视频在线免费观看| 亚洲免费观看视频| 99精品福利视频| 欧美综合国产精品久久丁香| 欧美va天堂va视频va在线| 欧美一区二区播放| 亚洲第一福利社区| 亚洲日本在线观看| 久久久国产精品一区二区三区| 裸体素人女欧美日韩| 欧美四级剧情无删版影片| 亚洲影院一区| 农村妇女精品| 99这里只有久久精品视频| 欧美片网站免费| 国产亚洲成av人在线观看导航| 亚洲视频在线视频| 一本色道久久综合亚洲精品按摩| 午夜久久影院| 国产一区二区三区在线观看视频 | 午夜精品视频| 亚洲一区综合| 欧美一区二区三区另类| 国产毛片精品视频| 久久久亚洲综合| 国产精品一区二区a| 亚洲精品永久免费| 一本到12不卡视频在线dvd| 国产精品久久久久久久久久久久| 欧美激情在线有限公司| 伊人精品成人久久综合软件| 久久久夜精品| 欧美成人dvd在线视频| 亚洲在线不卡| 性一交一乱一区二区洋洋av| 国产精品黄色在线观看| 欧美韩国在线| 国产日韩精品电影| 久久精品国产亚洲一区二区| 在线欧美日韩国产| 亚洲素人一区二区| 国产午夜精品久久久久久免费视| 免费久久久一本精品久久区| 国产精品一区亚洲| 亚洲欧美日韩国产一区| 国产一区二区精品丝袜| 欧美一区二区三区精品电影| 国产一区二区三区免费不卡| 亚洲影院高清在线| 狠狠色综合播放一区二区| 亚洲午夜视频在线观看| 一本色道久久综合精品竹菊| 久久男女视频| 久久综合色8888| 亚洲看片网站| 欧美日韩一区在线观看| 国产一区二区三区久久悠悠色av | 亚洲欧洲视频| 一区二区三区精品国产| 亚洲精品少妇30p| 欧美性猛交视频| 午夜一区二区三区在线观看| 欧美r片在线| 一区二区三区免费看| 欧美精品自拍| aa级大片欧美| 鲁鲁狠狠狠7777一区二区| 亚洲电影在线看| 亚洲小视频在线| 美女爽到呻吟久久久久| 欧美四级在线观看| 日韩午夜激情| 久久久999精品| 在线观看日韩| 国产精品久久久爽爽爽麻豆色哟哟| 亚洲伊人久久综合| 亚洲黄色天堂| 乱中年女人伦av一区二区| 亚洲免费黄色| 夜夜嗨av色一区二区不卡| 国产精品日韩专区| 久久久亚洲高清| 日韩天堂av| 亚洲激情第一区| 狂野欧美一区| 国产精品高潮呻吟久久av黑人| 国产精品99久久久久久宅男 | 亚洲欧美区自拍先锋| 亚洲综合999| 夜夜嗨网站十八久久| 亚洲精品偷拍| 日韩一级二级三级| 黑人操亚洲美女惩罚| 国产欧美一区二区精品性色| 久久婷婷丁香| 欧美日本高清一区| 欧美网站在线观看| 亚洲黄色毛片| 亚洲欧美精品在线观看| 一区在线视频| 亚洲一区二区精品在线| 亚洲国产精品嫩草影院| 亚洲国产欧美不卡在线观看| 久久大逼视频| 欧美在线一二三区| 欧美刺激性大交免费视频| 蜜臀久久久99精品久久久久久| 亚洲免费一在线| 最新成人av在线| 亚洲欧美视频一区| 欧美日韩中文在线| 亚洲第一黄色| 夜久久久久久| 欧美顶级艳妇交换群宴| 最近中文字幕mv在线一区二区三区四区| 久久久久久久久久久成人| 亚洲国产精品久久久久| 亚洲精品免费一区二区三区| 亚洲视频1区| 欧美国产日韩精品免费观看| 亚洲第一成人在线| 欧美一级日韩一级| 欧美国产先锋| 亚洲专区国产精品| 欧美日韩亚洲综合| 亚洲——在线| 99精品国产在热久久| 久久久久久久网| 久久精品一区二区三区不卡牛牛| 欧美国产亚洲视频| 亚洲人线精品午夜| 亚洲精品日韩在线| 欧美三区免费完整视频在线观看| 亚洲国产高清在线| 美国十次了思思久久精品导航| 久久久一区二区| 国产一区二区三区久久精品| 久久精品国语| 欧美日韩mp4| 亚洲欧洲99久久| 欧美电影打屁股sp| 一区二区三区精品视频在线观看 | 先锋影音国产精品| 亚洲欧美另类国产| 亚洲欧洲在线观看| 亚洲大胆av| 欧美mv日韩mv亚洲| 91久久久在线| 亚洲精品乱码久久久久久久久| 欧美日韩亚洲一区三区| 久久青草久久| 玖玖玖国产精品| 亚洲欧美日韩一区二区三区在线观看 | 久久久久久夜精品精品免费|