• <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>

            tbwshc

            tbw

              C++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              95 Posts :: 8 Stories :: 3 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(4)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            在決定寫這本書的時(shí)候我面臨的一個最大的問題是:是否把C++加入到討論
            中去。盡管我熟悉C++,但是我不得不用C 和匯編來寫幾乎所有我的嵌入式軟件。而且在嵌入式軟件界對于C++是否值得所產(chǎn)生的性能損失的問題存有很大的爭議。一般認(rèn)為C++程序會產(chǎn)生更大的代碼,這些代碼執(zhí)行起來比完全用C寫的程序要慢。然而,C++給于程序員很多好處,并且我想在這本書中討論一些這樣的好處。因此,我最終決定把C++加入到討論中來,但是在我的例子中只是使用那些性能損失最小的特性。
            我相信很多的讀者在他們自己的嵌入式系統(tǒng)編程的時(shí)候會面對相同的問題。在結(jié)束這本書之前。我想簡單地評判一下每一種我使用過的C++特性。并且提醒你一些我沒有使用過的比較昂貴的特性。
            當(dāng)然,并不是每一件C++引入的事情都是昂貴的。很多老的C++tb編譯器并入了一個叫作C.front 的技術(shù),這項(xiàng)技術(shù)把C++的程序變成C,并且把結(jié)果供給標(biāo)準(zhǔn)的C 編譯器。這個事實(shí)暗示這兩種語言之間的句法差別很小,或與運(yùn)行代價(jià)無關(guān)(注2)。只有最新的C++特性,如模板,不能夠用這種方式處理。
            比如,類的定義是完全有益的。公有和私有成員數(shù)據(jù)及函數(shù)的列表與一個struct 及函數(shù)原型的列表沒有大的差別。然而,C++編譯器能夠用public 和private 關(guān)鍵字決定,哪一個方法調(diào)用和數(shù)據(jù)訪問是允許的或者是不允許的。因?yàn)檫@個決定在編譯的時(shí)候完成,所以運(yùn)行時(shí)不會付出代價(jià)。單純的加入類既不會影響代碼的大小,又不會影響你的程序的效率。
            默認(rèn)參數(shù)值也是沒有損失的。編譯器只是加入代碼使得在每次函數(shù)被無參數(shù)調(diào)用的時(shí)候傳遞一個默認(rèn)的值。類似地,函數(shù)名的重載也是編譯時(shí)的修改。具有相同名字但是不同參數(shù)的函數(shù)在編譯過程中分別分配了一個唯一的名字。每次函數(shù)名出現(xiàn)在程序中的時(shí)候編譯器就替換它,然后連接器正確的把它們匹配起來。我沒有在我的例子中使用C++的這一特性,但是我這幺做過而沒有影響性能。

            操作符的重載是另一個我使用過但是沒有包括在例子中的特性。無論何時(shí)編譯器見到這樣一個操作符,它只是用合適的函數(shù)調(diào)用來替換它。因此,在下面列出的代碼,最后兩行是等價(jià)的,性能的損失很容易明白:
            Complex a, b, c;
            c = operator+(a, b)
            // The traditional way: Function Call
            // The C++ way: Operator Overloading
            構(gòu)造函數(shù)和析構(gòu)函數(shù)也有一點(diǎn)與它們相關(guān)的損失。這些特殊的方法去分別保證每次這種類型的tbw對象在創(chuàng)建或者超出了范圍時(shí)被調(diào)用。然而,這個小量的開銷是為減少錯誤而支付的一個合理代價(jià)。構(gòu)造函數(shù)完整地刪除了一個C 語言編程中與未初始化數(shù)據(jù)結(jié)構(gòu)編程錯誤有關(guān)的類。這個特性也被證明是有用的,因?yàn)樗[藏了那些與像Timer 和Task 這樣復(fù)雜的類相關(guān)的笨拙初始化順序。
            虛擬函數(shù)也具有一個合理的代價(jià)收益比。不要深究太多的關(guān)于什么是虛擬函數(shù)的細(xì)節(jié),讓我們只是說一下沒有它們多態(tài)性就是不可能的。而沒有多態(tài)性,C++就不可能是一個真正的面向?qū)ο蟮恼Z言。虛擬函數(shù)唯一一個明顯的代價(jià)是在調(diào)用虛擬函數(shù)之前附加了一個存儲查詢。普通的函數(shù)和方法調(diào)用是不受影響的。就我的體驗(yàn)來說太昂貴的 C++特性有模板、異常事件及運(yùn)行類型識別。這三個特性都對代碼的大小有負(fù)面的影響,而且異常事件和運(yùn)行時(shí)類型識別還會增加執(zhí)行時(shí)間。在決定是否使用這些特性之前,你可能要做一些實(shí)驗(yàn)來看看它們會怎么樣影響你自己的應(yīng)用程序的大小及速度。

            posted on 2013-07-23 17:25 tbwshc 閱讀(101) 評論(0)  編輯 收藏 引用

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


            亚洲国产精品久久久久婷婷老年| 欧美亚洲色综久久精品国产| 亚洲成av人片不卡无码久久| 亚洲色欲久久久久综合网| 久久香蕉超碰97国产精品| 国产精自产拍久久久久久蜜| 国内高清久久久久久| 97久久精品人人做人人爽| 亚洲欧洲日产国码无码久久99| 色综合久久天天综合| 国产aⅴ激情无码久久| 91精品国产高清久久久久久国产嫩草| 三级片免费观看久久| 亚洲一本综合久久| 精品国际久久久久999波多野| 亚洲中文字幕伊人久久无码| 久久精品国产清自在天天线| 久久青青草原精品国产| 久久午夜免费视频| 亚洲国产小视频精品久久久三级| 久久99国产精品99久久| 精品久久久久久中文字幕人妻最新| 午夜福利91久久福利| 久久久综合香蕉尹人综合网| 久久精品国产亚洲沈樵| 国产精品久久99| 精品久久久久久成人AV| 久久亚洲精品无码AV红樱桃| 久久久国产打桩机| 久久久久久久精品成人热色戒 | 国产精品久久99| 久久久久99精品成人片直播| 久久久久久夜精品精品免费啦 | 久久93精品国产91久久综合| 国产亚洲美女精品久久久| 99久久亚洲综合精品成人| 国产激情久久久久影院老熟女免费 | 久久精品国产黑森林| 亚洲а∨天堂久久精品| 久久久久久久波多野结衣高潮| 伊人久久大香线蕉综合影院首页|