• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    C++高層次抽象效率分析

    2017-12-15 04:00:34孫曉范楊志敏
    無(wú)線互聯(lián)科技 2017年23期
    關(guān)鍵詞:多態(tài)對(duì)象成員

    王 威,孫曉范,楊志敏

    (1.山東外事翻譯職業(yè)學(xué)院,山東 威海 264504;2.山東大學(xué) 機(jī)電與信息工程學(xué)院,山東 威海 264209)

    C++高層次抽象效率分析

    王 威1,孫曉范1,楊志敏2

    (1.山東外事翻譯職業(yè)學(xué)院,山東 威海 264504;2.山東大學(xué) 機(jī)電與信息工程學(xué)院,山東 威海 264209)

    一開(kāi)始C++是作為C語(yǔ)言的增強(qiáng)版出現(xiàn)的,從增加類開(kāi)始,C語(yǔ)言不斷地增加新特性。在學(xué)習(xí)C++時(shí)可以將其作為一門獨(dú)立的語(yǔ)言,因?yàn)槠洳⒉灰蕾囉贑語(yǔ)言。《Thinking in C++》認(rèn)為在運(yùn)行效率上往往有一個(gè)±5%的差異。有說(shuō)法認(rèn)為高層次的抽象功能導(dǎo)致了C++的效率下降。為驗(yàn)證這個(gè)問(wèn)題,文章就一些有代表性的案例在封裝、繼承和多態(tài)的性能,并部分與C和Java語(yǔ)言進(jìn)行的比較,對(duì)引起效率下降的可能原因作出總結(jié),并給予相應(yīng)的解決方案。

    C++;高層次抽象;面向?qū)ο?;編譯優(yōu)化

    C++有3種編程范型:面向過(guò)程編程、面向?qū)ο缶幊毯头盒途幊蹋瑢?duì)應(yīng)3個(gè)抽象級(jí)別:過(guò)程抽象、數(shù)據(jù)抽象和模板[1]。高層次抽象涉及的是后面兩項(xiàng)。一般來(lái)說(shuō),抽象水平越高,越有利于分析和處理實(shí)際問(wèn)題。但同時(shí)可能會(huì)導(dǎo)致程序的性能下降。面向?qū)ο缶幊绦枰褂妙惖姆庋b、繼承和多態(tài)。封裝需要預(yù)先定義數(shù)據(jù)成員和類成員,使得程序變得累贅和臃腫。類的繼承則加劇了這種麻煩,因?yàn)樽宇惗家獜钠浠惱^承類的成員。這使得高層次抽象看起來(lái)比面向過(guò)程編程在編程空間上負(fù)擔(dān)更加沉重。另一方面,多態(tài)意味著我們必須花費(fèi)額外的時(shí)間做動(dòng)態(tài)數(shù)據(jù)類型綁定。C++在盡可能地確保運(yùn)行效率的前提下提供高層次抽象。在這里我們通過(guò)測(cè)試應(yīng)用程序分析C++的抽象機(jī)制并不時(shí)與其他語(yǔ)言做比較,來(lái)驗(yàn)證高層次抽象的表現(xiàn)。

    1 機(jī)制分析

    C++支持各種不同的編程方法,這就是所謂的多范式編程,允許程序員針對(duì)不同的問(wèn)題選擇適當(dāng)?shù)哪J?。這里我們只討論高層次抽象的部分,對(duì)應(yīng)數(shù)據(jù)抽象和模板。

    1.1 面向?qū)ο缶幊?/h3>

    面向?qū)ο缶幊虣C(jī)制包括封裝、繼承和多態(tài),還有友元和內(nèi)聯(lián)機(jī)制。

    1.1.1 封裝和繼承

    封裝主要靠類實(shí)現(xiàn)。類的實(shí)例被稱為對(duì)象,是面向?qū)ο缶幊痰幕A(chǔ)。一個(gè)類通常包含大量的數(shù)據(jù)成員和函數(shù)成員,使得其看起來(lái)像使用過(guò)多的內(nèi)存空間。事實(shí)上,C++只為對(duì)象的數(shù)據(jù)成員分配一個(gè)單獨(dú)的存儲(chǔ)空間。編譯器不將數(shù)據(jù)成員歸入對(duì)象。

    編譯和運(yùn)行如圖1所示中的代碼,可以得到結(jié)果是8。這里有兩個(gè)數(shù)據(jù)成員,一個(gè)函數(shù)成員和一個(gè)友元類,但只有數(shù)據(jù)成員消耗存儲(chǔ)空間。一個(gè)int類型的a占用4個(gè)字節(jié),一個(gè)bool類型的b占用1個(gè)字節(jié),根據(jù)C++中的對(duì)齊原則,系統(tǒng)分配另外4個(gè)字節(jié)以保持空間容易讀寫。我們可以看到函數(shù)成員和友元類的空間分配[2]。如果有一個(gè)從B派生出的子類,有自己的新數(shù)據(jù)成員和函數(shù)成員,同樣也會(huì)有從B中繼承的成員。但是我們可以驗(yàn)證系統(tǒng)只為子類中新添加的數(shù)據(jù)成員和從B中派生的成員分配空間。因此其和C語(yǔ)言中具有同樣數(shù)據(jù)成員的structure占據(jù)同樣的內(nèi)存空間。

    圖1 一個(gè)典型的類

    C++中對(duì)函數(shù)成員的處理是做對(duì)象到函數(shù)的映射。這是在編譯時(shí)進(jìn)行的所以是靜態(tài)綁定。函數(shù)成員通過(guò)隱藏的this指針訪問(wèn)數(shù)據(jù)成員,這也是唯一可能降低時(shí)間效率的因素。但是在C語(yǔ)言中只包含數(shù)據(jù)成員和一個(gè)獨(dú)立的函數(shù)來(lái)實(shí)現(xiàn)相同功能的structure同樣也需要一個(gè)指針來(lái)傳遞給構(gòu)造函數(shù)。因此在時(shí)間開(kāi)銷上,使用類的C++程序和使用相同功能結(jié)構(gòu)的C語(yǔ)言程序沒(méi)有太大區(qū)別。

    C++的性能與對(duì)象的邏輯存儲(chǔ)位置也有關(guān)。C++的對(duì)象可以被分配在兩個(gè)位置:堆和棧。同一對(duì)象在堆和棧中分布會(huì)有不同的表現(xiàn)。棧對(duì)象在程序進(jìn)入函數(shù)體的時(shí)候完成創(chuàng)建,而堆對(duì)象是在程序運(yùn)行到new語(yǔ)句時(shí)開(kāi)始創(chuàng)建,意味著它創(chuàng)建一個(gè)新的類實(shí)例。管理堆對(duì)象的時(shí)間開(kāi)銷很大。如果我們?cè)诔绦蜻\(yùn)行時(shí)做了動(dòng)態(tài)內(nèi)存分配和回收,內(nèi)存空間中將會(huì)出現(xiàn)碎片[3]。如果存儲(chǔ)碎片太多,操作系統(tǒng)必須花費(fèi)額外的時(shí)間做整理而導(dǎo)致堆對(duì)象的存儲(chǔ)管理時(shí)間開(kāi)銷迅速增加。C++僅在程序剛開(kāi)始的時(shí)候使用堆對(duì)象,這時(shí)候還沒(méi)有產(chǎn)生內(nèi)存碎片。相對(duì)于只是用堆對(duì)象的Java,C++使用棧使得其運(yùn)營(yíng)效率表現(xiàn)往往要比Java好。

    從上面的分析可以看出C++的類機(jī)制不增加運(yùn)行時(shí)開(kāi)銷。堆棧的使用讓C++具有更好的存儲(chǔ)管理性能。

    1.1.2 運(yùn)行時(shí)多態(tài)

    運(yùn)行時(shí)多態(tài),又稱動(dòng)態(tài)多態(tài)是面向?qū)ο缶幊痰暮诵奶卣鳌_@是通過(guò)延遲對(duì)象和操作的綁定至運(yùn)行時(shí)實(shí)現(xiàn)的,因此稱之為動(dòng)態(tài)多態(tài)。C++運(yùn)行時(shí)多態(tài)是基于虛函數(shù)機(jī)制的。

    要使一個(gè)函數(shù)顯示多態(tài)性,必須聲明其為一個(gè)虛函數(shù)。包含虛函數(shù)的類被稱為多態(tài)類,其中的對(duì)象存儲(chǔ)方式已經(jīng)改變,除了前面提到的數(shù)據(jù)成員,還加上了一個(gè)虛函數(shù)表指針。該指針指向一個(gè)虛函數(shù)表,其中每個(gè)項(xiàng)目對(duì)應(yīng)一個(gè)虛函數(shù)地址。這些虛函數(shù)包括他們自己的對(duì)象和從基類的虛函數(shù)繼承來(lái)的部分[4]。虛函數(shù)表為類中所有對(duì)象共享。

    如圖2所示,與普通類相比,多態(tài)類的對(duì)象添加一個(gè)指向內(nèi)存的指針。要訪問(wèn)虛函數(shù),必須要有個(gè)指針間的訪問(wèn)操作,這會(huì)成為影響性能的一個(gè)重要因素。因此運(yùn)行時(shí)多態(tài)確實(shí)增加了程序的時(shí)間和空間開(kāi)銷。更重要的是,虛函數(shù)不能被內(nèi)聯(lián)?;谶@些原因,為節(jié)約系統(tǒng)資源,虛函數(shù)的使用應(yīng)盡可能限制。

    圖2 虛擬功能機(jī)制

    1.1.3 編譯時(shí)多態(tài)

    由于運(yùn)行時(shí)多態(tài)降低程序性能,我們被迫采取其他的措施來(lái)實(shí)現(xiàn)多態(tài),這就是編譯時(shí)多態(tài)。C++中有兩種方法實(shí)現(xiàn)這一機(jī)制:函數(shù)重載和模板。

    函數(shù)重載是指用相同的名稱來(lái)定義不同的參數(shù)(可以是不同類型或不同數(shù)目的參數(shù))。重載可以發(fā)生在同一類中或者繼承中。然而當(dāng)固定參數(shù)的函數(shù)需要表現(xiàn)出多態(tài)時(shí),重載無(wú)能為力,因?yàn)槿绻宇愔匦露x的函數(shù)中具有與祖先類中的參數(shù)相同的名稱,這時(shí)并沒(méi)有發(fā)生重載,只是在子類函數(shù)中覆蓋基類。這意味著重載不能代替虛函數(shù)機(jī)制。

    模板也成為參數(shù)化類型。當(dāng)編譯器遇到一個(gè)模板調(diào)用語(yǔ)句,它會(huì)產(chǎn)生函數(shù)定義或者類定義的參數(shù)類型,這叫作模板實(shí)例化。模板實(shí)例化的本質(zhì)就是模板與特定類型的綁定。綁定發(fā)生在編譯過(guò)程中,因此屬于靜態(tài)綁定。與動(dòng)態(tài)綁定不同靜態(tài)綁定不會(huì)導(dǎo)致程序運(yùn)行效率的下降。所以模板多態(tài)往往比運(yùn)行時(shí)多態(tài)有更好的效率優(yōu)勢(shì)。

    另一方面,模板類經(jīng)常使用嵌套類型來(lái)定義自己與外界之間的接口。一個(gè)典型的例子是在標(biāo)準(zhǔn)模板庫(kù)(Standard Template Library,STL)中廣泛使用的容器,常用嵌套定義自己的迭代器。這可能會(huì)導(dǎo)致代碼膨脹,增加出錯(cuò)概率。

    1.1.4 內(nèi)聯(lián)

    在封裝原則的基礎(chǔ)上,類的數(shù)據(jù)成員是不開(kāi)放的,這意味著如果外部函數(shù)想要訪問(wèn)它們只能通過(guò)成員訪問(wèn)函數(shù)(典型是一個(gè)set和get)。如果一個(gè)函數(shù)需要訪問(wèn)很多數(shù)據(jù)成員,這個(gè)函數(shù)就會(huì)被頻繁調(diào)用,會(huì)導(dǎo)致程序性能的顯著下降。內(nèi)聯(lián)機(jī)制就是為了解決這一問(wèn)題出現(xiàn)的。

    從源代碼來(lái)看,內(nèi)聯(lián)函數(shù)有函數(shù)的結(jié)構(gòu)但是在編譯時(shí)沒(méi)有函數(shù)的性質(zhì)。在編譯過(guò)程中,它使用函數(shù)體代替函數(shù)名。為了讀寫private或protected成員,必須使用接口功能。如果我們定義這些函數(shù)為內(nèi)聯(lián)成員函數(shù),會(huì)得到更好的效率。

    但是內(nèi)聯(lián)機(jī)制有一定的局限性。當(dāng)內(nèi)聯(lián)函數(shù)過(guò)小并且返回值是一個(gè)復(fù)雜的對(duì)象時(shí),性能上的優(yōu)勢(shì)是最明顯的。但如果函數(shù)體本身很大,或者它內(nèi)部又調(diào)用了其他的內(nèi)聯(lián)函數(shù)(或switch語(yǔ)句的使用造成的遞歸),代碼不僅不能有更好的性能,反而會(huì)發(fā)生膨脹。一般情況下,我們所定義的函數(shù)體都很大,所以內(nèi)聯(lián)機(jī)制應(yīng)謹(jǐn)慎使用。

    1.1.5 友元

    在默認(rèn)配置下,編譯器可以決定是否把內(nèi)聯(lián)函數(shù)處理成普通的函數(shù)以避免可能出現(xiàn)的副作用,所以內(nèi)聯(lián)機(jī)制并非普遍適用。解決這一問(wèn)題要用到友元機(jī)制。

    友元是一個(gè)在類外定義的函數(shù)或者類,在類體前標(biāo)注關(guān)鍵字friend來(lái)和類中的成員函數(shù)做區(qū)別。友元不是一個(gè)成員函數(shù),但可以訪問(wèn)類的私有成員[5]。雖然這種機(jī)制破壞了類的封裝,但它的確可以保證某些程序的運(yùn)行效率。例如,矩陣的乘法運(yùn)算函數(shù)通常會(huì)被聲明為一個(gè)矩陣類的友元。

    在Java中,類的私有成員不能從外部訪問(wèn)。然而,Java使用一個(gè)默認(rèn)的訪問(wèn)機(jī)制,以限制同一個(gè)包中的數(shù)據(jù)成員,這在一定程度上減輕了函數(shù)經(jīng)常訪問(wèn)數(shù)據(jù)成員所造成的性能下降。顯然,Java中的訪問(wèn)控制機(jī)制不如C++中精細(xì)。

    1.2 泛型編程機(jī)制

    泛型編程最初提出的動(dòng)機(jī)是想要發(fā)明一種語(yǔ)言機(jī)制來(lái)幫助實(shí)現(xiàn)一個(gè)通用標(biāo)準(zhǔn)容器庫(kù)。泛型表示對(duì)各種類似于模板的數(shù)據(jù)類型都具有可操作性。泛型編程包括類模板和函數(shù)模板,具體到C++中的STL,可以分為6個(gè)主要的組成部分:分配器、迭代器、容器、算法、函數(shù)對(duì)象和適配器[6]。

    1.2.1 分配器

    許多C++程序往往涉及大量的小對(duì)象創(chuàng)建和銷毀,例如STL中的樹節(jié)點(diǎn)和鏈表節(jié)點(diǎn)。這可能導(dǎo)致使用new/delete機(jī)制的程序時(shí)間效率下降。對(duì)象的創(chuàng)建和銷毀開(kāi)銷過(guò)重,頻繁的內(nèi)存分配和大量小對(duì)象碎片的回收都是原因。因此有必要引入一個(gè)特殊的分配程序來(lái)提高時(shí)間效率,這就是分配器。

    準(zhǔn)備兩個(gè)程序,每個(gè)分配和回收一百萬(wàn)個(gè)小對(duì)象。一個(gè)使用常用的new/delete方式,另一個(gè)使用分配器。運(yùn)行它們,看到比較的結(jié)果。我們可以看到使用分配器的程序具有更好的運(yùn)行性能。這里是一個(gè)小測(cè)試,用一個(gè)典型的類person,數(shù)據(jù)成員有不同類型的gender,name和age還有一些get/set函數(shù)。本次測(cè)試的時(shí)間開(kāi)銷如圖3所示。

    圖3 通用方法和分配器機(jī)制創(chuàng)建和銷毀100萬(wàn)個(gè)對(duì)象所消耗的平均時(shí)間

    這僅僅是一個(gè)小測(cè)試。對(duì)于那些需要長(zhǎng)期運(yùn)行在服務(wù)器端的程序,內(nèi)存管理關(guān)系到程序的穩(wěn)定性。專用的存儲(chǔ)操作,有利于程序性能和操作系統(tǒng)管理內(nèi)存。在特定的情況下,使用分配器可以使模擬器、編譯器或其他類似的運(yùn)行時(shí)間快一倍。

    1.2.2 迭代器

    迭代器是STL中一種可以用來(lái)遍歷容器的部分或全部元素的對(duì)象。每個(gè)容器的類型必須通過(guò)內(nèi)嵌套定義提供自己的迭代器。因此,迭代器具有相同的接口不同的類型。迭代器有很多不同的功能,其可以將抽象容器和通用算法有機(jī)地聯(lián)系起來(lái)。容器、算法、迭代器之間的關(guān)系如圖4所示。

    迭代器實(shí)際上是一個(gè)模板模仿指針行為以允許用戶訪問(wèn)容器中的元素。那么其和指針相比性能如何呢?這里我們?cè)O(shè)定3個(gè)評(píng)價(jià)標(biāo)準(zhǔn):迭代性能,取內(nèi)容性能和成員訪問(wèn)性能。迭代是指迭代器從現(xiàn)在的位置移動(dòng)到指定位置,取內(nèi)容是指移動(dòng)對(duì)象內(nèi)容到迭代器,成員訪問(wèn)是指訪問(wèn)迭代器關(guān)聯(lián)的成員。迭代器和指針std::vector都有這3個(gè)功能,我們使用這個(gè)指針和迭代器做測(cè)試比較。測(cè)試結(jié)果如圖5所示.

    從上面的測(cè)評(píng)我們可以看出,與指針相比迭代器的時(shí)間開(kāi)銷是相當(dāng)大的。因此迭代操作應(yīng)避免出現(xiàn)在小規(guī)模的編程中。但是我們也不能因此否定其存在。由于迭代器的出現(xiàn),容易和算法獨(dú)立開(kāi)來(lái),這是指針?biāo)鶡o(wú)法做到的。

    圖4 容器、算法、迭代器之間的關(guān)系

    1.2.3 算法和函數(shù)對(duì)象

    STL算法是一個(gè)處理容器和迭代器元素的模板類,和容器獨(dú)立。因?yàn)樵谌萜髦械脑仡愋涂梢愿淖儯惴ū仨毮軌蛱幚聿煌愋偷臄?shù)據(jù)。所以其需要程序傳遞類型作為參數(shù)的操作到算法。STL使用函數(shù)對(duì)象來(lái)解決問(wèn)題。函數(shù)對(duì)象是一個(gè)類,重載了operator(args,…)函數(shù),提供需要的操作。函數(shù)對(duì)象作為參數(shù)傳遞給算法,算法會(huì)得到需要的操作。

    圖5 迭代器和指針之間的性能比較

    Bjarne Stroutstrup做了一個(gè)特殊的測(cè)試,對(duì) fl oat和string類型作快速排序,分別用C標(biāo)準(zhǔn)庫(kù)中的qsort函數(shù)和STL中的排序算法。結(jié)果如圖6所示。

    從圖中可以看到C標(biāo)準(zhǔn)庫(kù)和C++的STL排序算法之間性能有著顯著的差異。由于排序操作在C/C++編程中高頻出現(xiàn),上述測(cè)試結(jié)果是很有代表性的。

    2 總體分析

    從本文前面的分析和性能測(cè)試可以看到,高層次抽象編程本身是相輔相成的。面向?qū)ο髾C(jī)制,如大型的繼承和運(yùn)行時(shí)多態(tài),往往會(huì)讓程序的性能下降。但是泛型機(jī)制,如模板和STL算法,總是趨向于彌補(bǔ)這一損失。因此,即使應(yīng)用程序的性能下降,高層次抽象也不應(yīng)該負(fù)主要責(zé)任。問(wèn)題是如何使用這語(yǔ)言讓其表現(xiàn)最佳。

    2.1 庫(kù)

    有精心設(shè)計(jì)的庫(kù),程序員可以在一個(gè)比C或Fortran更高的水平抽象代碼。代碼將更容易閱讀,效率也可以得到保證。使用精心設(shè)計(jì)的特定應(yīng)用程序庫(kù),可以防止很多常見(jiàn)的錯(cuò)誤。具有相同函數(shù)的庫(kù)通常彼此有不同性能。所以選擇一個(gè)合適的庫(kù)也是提高程序性能的一種有效措施。一些庫(kù)之間有可能不同版本間存在差異,因此要注意選擇高效率的庫(kù)版本。

    2.2 編譯優(yōu)化

    通常情況下,編譯優(yōu)化可以在很多層面上進(jìn)行,例如語(yǔ)句級(jí)、塊級(jí)和全局級(jí)別。優(yōu)化層次越高,程序性能提高越明顯。例如,在語(yǔ)句級(jí)優(yōu)化,編譯器可以很容易地保存臨時(shí)數(shù)據(jù)內(nèi)存,但在塊級(jí)別上,編譯器可以省略函數(shù)模板實(shí)例生成。抽象層次越高,越容易在更高的代碼級(jí)別形成一個(gè)清晰的結(jié)構(gòu),編譯器也更容易做更高層次的優(yōu)化。

    2.3 基于全局優(yōu)化的應(yīng)用環(huán)境

    應(yīng)根據(jù)應(yīng)用程序執(zhí)行環(huán)境進(jìn)行合理的編譯器優(yōu)化。通常來(lái)說(shuō),C++編譯器有很多不同的應(yīng)用程序參數(shù)來(lái)優(yōu)化配置選項(xiàng)。

    一般來(lái)說(shuō),使用異常處理會(huì)降低系統(tǒng)的效率。在系統(tǒng)資源有限的情況下,我們應(yīng)該盡量不適用異常處理并禁止拋出異常。但是這樣對(duì)提高性能的作用有限,通常只有1%左右。更激進(jìn)的方法是禁用異常處理,但如果在這時(shí)拋出任何異常,系統(tǒng)都會(huì)立即崩潰。很多庫(kù)都依賴于異常處理,所以禁用異常處理是不安全的。

    參數(shù)_declspec(novtable)是用于當(dāng)編譯器構(gòu)造特定對(duì)象時(shí)阻止初始化虛函數(shù)表的。因?yàn)槌橄箢愔械膶?shí)例無(wú)法獨(dú)立存在而是要依賴于具體的子類對(duì)象,不需要初始化虛函數(shù)列表,所以這個(gè)參數(shù)只對(duì)抽象類有用。由于虛函數(shù)的開(kāi)銷是很大的,當(dāng)系統(tǒng)資源有限時(shí)應(yīng)該盡量避免使用虛函數(shù)。如果必須使用,應(yīng)該禁止初始化虛函數(shù)表。

    默認(rèn)情況下,編譯器只對(duì)防止代碼發(fā)生膨脹的函數(shù)進(jìn)行內(nèi)聯(lián)。使用/OB1可以迫使其打開(kāi)內(nèi)聯(lián)。但要優(yōu)化代碼執(zhí)行速度往往導(dǎo)致代碼膨脹,降低程序的時(shí)間和空間效率。因此建議不要強(qiáng)制打開(kāi)內(nèi)聯(lián)。

    3 結(jié)語(yǔ)

    在分析了高層次抽象的主要機(jī)制后,人們知道高層次抽象是一把雙刃劍,它可以顯著改善編程效率和程序穩(wěn)定性,另一方面,如果不正確使用就會(huì)導(dǎo)致性能下降。這些操作會(huì)降低效率:對(duì)繼承的過(guò)度依賴,濫用虛函數(shù)或迭代器,強(qiáng)制大函數(shù)內(nèi)聯(lián),初始化抽象類的虛函數(shù)表,不禁用所有的異常處理函數(shù)或程序。可以提高效率的方案有:優(yōu)先使用庫(kù),選擇高效庫(kù),使用模板代替繼承,限制對(duì)嵌套類型參數(shù)的依賴,內(nèi)聯(lián)小的函數(shù),使用STL算法和函數(shù)對(duì)象。

    圖6 500萬(wàn)個(gè)float和200萬(wàn)個(gè)strings的平均時(shí)間成本比較

    [1] STROUSTRUP B.Abstraction,libraries,and efficiency in C++[J].Dr. Dobb’s Journal China,2003(1):10.

    [2] STROUSTRUP B.The design and evolution of C++[M].New Jersey:Addison-Wesley,2002.

    [3] DAN T,WISNIEWSKI R W,BACON D F,et al.Minimizing dependencies within generic classes for faster and smaller programs[J].Acm Sigplan Conference on Object Oriented Programming Systems Languages amp; Applications,2009(10):425-444.

    [4] ISENSEE P.C++ optimization strategies and techniques[EB/OL].(2016-10-15)[2017-11-09].http://www.tantalon.com/pete/cppopt/main.htm.

    [5] HOU J.Analysis of STL source code[D].Wuhan:Huazhong University of Science and Technology,2002.

    [6] STROUSTRUP B.Learning standard C++ as a new language[J].C/C++ Users Journal,1999(5):43-54.

    Analysis on efficiency of C++ high-level abstraction

    Wang Wei1, Sun Xiaofan1, Yang Zhimin2
    (1.Shandong Vocational College of Foreign Affairs Translation, Weihai 264504, China;2.Mechanial, Electrical and Information Engineering School, Shandong University, Weihai 264209, China)

    At first, C ++ appears as an enhanced version of C, starting with adding classes, and C continues to add new features. It can be used as a stand-alone language when learning C++ because it does not depend on C language. Thinking in C++ thinks there is often a ± 5% difference in operational efficiency. There is argument that the high-level abstraction caused C++ efficiency decline. In order to verify this problem, this article summarizes the possible causes of the decline in efficiency and gives corresponding solutions based on the performance of encapsulation, inheritance and polymorphism in some representative cases and some comparison with C and Java.

    C++; high-level abstraction; object-oriented; compiler optimization

    王威(1981— ),女,遼寧沈陽(yáng)人,講師,學(xué)士;研究方向:信息技術(shù)應(yīng)用。

    猜你喜歡
    多態(tài)對(duì)象成員
    神秘來(lái)電
    睿士(2023年2期)2023-03-02 02:01:09
    主編及編委會(huì)成員簡(jiǎn)介
    主編及編委會(huì)成員簡(jiǎn)介
    主編及編委會(huì)成員簡(jiǎn)介
    主編及編委會(huì)成員簡(jiǎn)介
    分層多態(tài)加權(quán)k/n系統(tǒng)的可用性建模與設(shè)計(jì)優(yōu)化
    參差多態(tài)而功不唐捐
    攻略對(duì)象的心思好難猜
    意林(2018年3期)2018-03-02 15:17:24
    基于熵的快速掃描法的FNEA初始對(duì)象的生成方法
    區(qū)間對(duì)象族的可鎮(zhèn)定性分析
    久久久国产精品麻豆| 久久久久久免费高清国产稀缺| 亚洲av成人一区二区三| 九色国产91popny在线| 免费在线观看亚洲国产| 欧美乱妇无乱码| 一个人观看的视频www高清免费观看 | 一区福利在线观看| 国产99白浆流出| 成人国产综合亚洲| 男男h啪啪无遮挡| 国产精品久久电影中文字幕| 非洲黑人性xxxx精品又粗又长| 欧美在线一区亚洲| 午夜福利免费观看在线| 欧美黑人精品巨大| 亚洲乱码一区二区免费版| 老汉色∧v一级毛片| 三级男女做爰猛烈吃奶摸视频| 国产免费男女视频| 日日摸夜夜添夜夜添小说| 国产精品一区二区免费欧美| 中出人妻视频一区二区| 非洲黑人性xxxx精品又粗又长| 亚洲一卡2卡3卡4卡5卡精品中文| 夜夜爽天天搞| а√天堂www在线а√下载| 床上黄色一级片| 久久中文看片网| 少妇被粗大的猛进出69影院| 少妇人妻一区二区三区视频| 欧美又色又爽又黄视频| 久久久久久人人人人人| 欧美成人午夜精品| 国产精品99久久99久久久不卡| 亚洲欧美日韩东京热| 中文资源天堂在线| 真人做人爱边吃奶动态| 一本精品99久久精品77| 欧美另类亚洲清纯唯美| 狂野欧美激情性xxxx| 日本撒尿小便嘘嘘汇集6| 国产熟女午夜一区二区三区| 俺也久久电影网| 欧美zozozo另类| 搡老妇女老女人老熟妇| 久久久精品欧美日韩精品| 哪里可以看免费的av片| 91麻豆精品激情在线观看国产| 国产又色又爽无遮挡免费看| 午夜影院日韩av| 日韩精品青青久久久久久| 一进一出抽搐gif免费好疼| 黑人巨大精品欧美一区二区mp4| 国内精品一区二区在线观看| 搡老熟女国产l中国老女人| 日日爽夜夜爽网站| 国产成人av激情在线播放| 欧美成狂野欧美在线观看| 国产精品 国内视频| 久久中文字幕人妻熟女| 欧美日韩中文字幕国产精品一区二区三区| 午夜免费观看网址| 国产欧美日韩一区二区三| 亚洲精品久久成人aⅴ小说| 日本 av在线| 亚洲精品久久成人aⅴ小说| 黄色女人牲交| 久久国产乱子伦精品免费另类| 免费看a级黄色片| 人人妻,人人澡人人爽秒播| 午夜福利高清视频| 亚洲人成网站在线播放欧美日韩| 欧美绝顶高潮抽搐喷水| 成人永久免费在线观看视频| 久久精品国产综合久久久| 国产激情偷乱视频一区二区| 最新美女视频免费是黄的| 中文字幕精品亚洲无线码一区| 亚洲人成电影免费在线| 欧美成狂野欧美在线观看| a在线观看视频网站| 一个人观看的视频www高清免费观看 | 可以免费在线观看a视频的电影网站| 最新在线观看一区二区三区| 最新在线观看一区二区三区| 亚洲第一欧美日韩一区二区三区| 国产成人欧美在线观看| 亚洲免费av在线视频| 亚洲第一欧美日韩一区二区三区| 91麻豆av在线| 校园春色视频在线观看| 精品久久久久久成人av| 蜜桃久久精品国产亚洲av| 成人亚洲精品av一区二区| 亚洲av电影不卡..在线观看| 最新美女视频免费是黄的| 人妻丰满熟妇av一区二区三区| 淫妇啪啪啪对白视频| 欧美极品一区二区三区四区| 国产成人啪精品午夜网站| 色尼玛亚洲综合影院| 伦理电影免费视频| 91大片在线观看| 久久热在线av| 夜夜躁狠狠躁天天躁| 怎么达到女性高潮| 欧美大码av| 日韩大尺度精品在线看网址| 中文字幕久久专区| 国产av麻豆久久久久久久| 中文资源天堂在线| 亚洲欧美日韩东京热| 欧美精品亚洲一区二区| 国产精品1区2区在线观看.| 精品国产亚洲在线| 悠悠久久av| 嫩草影视91久久| 久久人人精品亚洲av| 国产真人三级小视频在线观看| 啦啦啦免费观看视频1| 男女下面进入的视频免费午夜| 久久精品夜夜夜夜夜久久蜜豆 | 欧美性猛交黑人性爽| 精品久久久久久,| 啦啦啦免费观看视频1| 一区二区三区激情视频| 午夜视频精品福利| 日韩精品青青久久久久久| 色噜噜av男人的天堂激情| 日本 av在线| 老汉色av国产亚洲站长工具| 国产精品日韩av在线免费观看| 久久精品综合一区二区三区| 亚洲人成77777在线视频| 免费观看人在逋| 麻豆av在线久日| 久久香蕉激情| 国内精品久久久久久久电影| 亚洲第一欧美日韩一区二区三区| 日本三级黄在线观看| 最新美女视频免费是黄的| 日日爽夜夜爽网站| 91九色精品人成在线观看| 熟妇人妻久久中文字幕3abv| 欧美激情久久久久久爽电影| 中文亚洲av片在线观看爽| 亚洲精品中文字幕在线视频| 999久久久国产精品视频| 精品人妻1区二区| av国产免费在线观看| 黄片小视频在线播放| 久久久久久国产a免费观看| 我要搜黄色片| 夜夜爽天天搞| 99精品久久久久人妻精品| 国产视频内射| 欧美成人免费av一区二区三区| 日本三级黄在线观看| 欧美精品亚洲一区二区| 熟女电影av网| 大型黄色视频在线免费观看| 亚洲美女黄片视频| 亚洲精品久久成人aⅴ小说| 日本精品一区二区三区蜜桃| 亚洲精品粉嫩美女一区| 亚洲人成77777在线视频| 亚洲av熟女| 国产精华一区二区三区| 免费在线观看黄色视频的| av片东京热男人的天堂| 午夜成年电影在线免费观看| 夜夜躁狠狠躁天天躁| 国产伦一二天堂av在线观看| 精品不卡国产一区二区三区| 一进一出抽搐gif免费好疼| 少妇人妻一区二区三区视频| 精品国产美女av久久久久小说| 床上黄色一级片| 亚洲av第一区精品v没综合| 成年人黄色毛片网站| 少妇的丰满在线观看| 一本精品99久久精品77| 欧美日韩国产亚洲二区| 精品国产超薄肉色丝袜足j| 午夜福利在线在线| 男女做爰动态图高潮gif福利片| 久久香蕉国产精品| 精品免费久久久久久久清纯| 最近在线观看免费完整版| 国产97色在线日韩免费| 亚洲国产精品久久男人天堂| 精品国内亚洲2022精品成人| 在线观看舔阴道视频| av福利片在线观看| 亚洲全国av大片| 国产真人三级小视频在线观看| 日韩欧美三级三区| 最近视频中文字幕2019在线8| 久久精品91无色码中文字幕| 国产成人一区二区三区免费视频网站| 91麻豆av在线| 免费观看精品视频网站| 国产精品乱码一区二三区的特点| 久久久久久免费高清国产稀缺| 色在线成人网| 国产精品免费一区二区三区在线| 叶爱在线成人免费视频播放| 91国产中文字幕| 91麻豆av在线| 久久 成人 亚洲| 国产精品乱码一区二三区的特点| 人妻夜夜爽99麻豆av| 99re在线观看精品视频| 亚洲精品美女久久av网站| 久久久久久久精品吃奶| 国产成人aa在线观看| 欧美一级毛片孕妇| 亚洲欧美日韩高清在线视频| 天天一区二区日本电影三级| 亚洲成人久久性| 国产真人三级小视频在线观看| 麻豆国产97在线/欧美 | bbb黄色大片| 成熟少妇高潮喷水视频| 丁香六月欧美| 老熟妇乱子伦视频在线观看| 男人舔女人的私密视频| 日韩精品免费视频一区二区三区| 中文字幕人妻丝袜一区二区| 黄色视频,在线免费观看| 两性夫妻黄色片| 桃色一区二区三区在线观看| 啦啦啦观看免费观看视频高清| www日本在线高清视频| 精品国产超薄肉色丝袜足j| 国产真人三级小视频在线观看| 国产黄a三级三级三级人| 日韩av在线大香蕉| av片东京热男人的天堂| 国产精品一区二区免费欧美| 手机成人av网站| 午夜视频精品福利| 国产精品一及| 天天添夜夜摸| 精品欧美国产一区二区三| 国产区一区二久久| 91老司机精品| 国产黄片美女视频| 色在线成人网| 变态另类丝袜制服| 18美女黄网站色大片免费观看| 在线看三级毛片| 窝窝影院91人妻| 夜夜看夜夜爽夜夜摸| av国产免费在线观看| av有码第一页| 日韩高清综合在线| 欧美日韩亚洲国产一区二区在线观看| 一区二区三区国产精品乱码| 亚洲中文字幕一区二区三区有码在线看 | xxx96com| 国产精品98久久久久久宅男小说| 国产三级中文精品| 国产欧美日韩精品亚洲av| 人成视频在线观看免费观看| 精品熟女少妇八av免费久了| 老司机福利观看| 成人永久免费在线观看视频| 老司机靠b影院| 黄片小视频在线播放| 亚洲黑人精品在线| 少妇的丰满在线观看| 国产av麻豆久久久久久久| 精品国产亚洲在线| 他把我摸到了高潮在线观看| 久久久久久久精品吃奶| 婷婷丁香在线五月| 好看av亚洲va欧美ⅴa在| 午夜视频精品福利| 国产91精品成人一区二区三区| 一个人观看的视频www高清免费观看 | 国产午夜福利久久久久久| 午夜a级毛片| 少妇裸体淫交视频免费看高清 | 中文在线观看免费www的网站 | or卡值多少钱| 欧美乱妇无乱码| 亚洲天堂国产精品一区在线| 亚洲欧美精品综合一区二区三区| 久久久久亚洲av毛片大全| 久久香蕉国产精品| 男插女下体视频免费在线播放| 国产久久久一区二区三区| 欧美日韩瑟瑟在线播放| 2021天堂中文幕一二区在线观| 淫秽高清视频在线观看| 1024手机看黄色片| 国内久久婷婷六月综合欲色啪| 久久久久国产精品人妻aⅴ院| 婷婷精品国产亚洲av在线| 日韩三级视频一区二区三区| 成人手机av| 国产高清videossex| www日本在线高清视频| 亚洲国产精品sss在线观看| 99国产综合亚洲精品| 真人一进一出gif抽搐免费| 午夜久久久久精精品| 小说图片视频综合网站| 在线永久观看黄色视频| 久久亚洲真实| 精品日产1卡2卡| 99国产精品一区二区三区| 欧美日本亚洲视频在线播放| or卡值多少钱| 老司机午夜十八禁免费视频| 亚洲国产日韩欧美精品在线观看 | 久久香蕉激情| 夜夜躁狠狠躁天天躁| 国产午夜福利久久久久久| 免费在线观看完整版高清| 人成视频在线观看免费观看| 婷婷丁香在线五月| 色老头精品视频在线观看| 在线视频色国产色| 亚洲av日韩精品久久久久久密| 亚洲人成电影免费在线| 麻豆一二三区av精品| 大型黄色视频在线免费观看| 19禁男女啪啪无遮挡网站| 欧美色视频一区免费| 国产精品一区二区免费欧美| 精品不卡国产一区二区三区| 精品国产美女av久久久久小说| 亚洲精华国产精华精| 高清在线国产一区| 变态另类成人亚洲欧美熟女| 国产主播在线观看一区二区| a级毛片在线看网站| 亚洲在线自拍视频| 国产99白浆流出| 亚洲精品美女久久av网站| bbb黄色大片| 99久久99久久久精品蜜桃| 女人高潮潮喷娇喘18禁视频| 久久精品综合一区二区三区| 狂野欧美白嫩少妇大欣赏| 中文字幕高清在线视频| 人人妻,人人澡人人爽秒播| 亚洲性夜色夜夜综合| 国产单亲对白刺激| 日本熟妇午夜| 久久这里只有精品中国| 18禁美女被吸乳视频| 午夜福利在线观看吧| √禁漫天堂资源中文www| 亚洲 欧美一区二区三区| 国产精品一区二区精品视频观看| 久久精品夜夜夜夜夜久久蜜豆 | 99久久精品国产亚洲精品| 国产成+人综合+亚洲专区| 免费看a级黄色片| 最近最新中文字幕大全免费视频| 欧美一级毛片孕妇| 欧美精品亚洲一区二区| 久久这里只有精品中国| 欧美成人一区二区免费高清观看 | 成人18禁在线播放| 精品一区二区三区视频在线观看免费| 日本精品一区二区三区蜜桃| 欧美日韩一级在线毛片| 一区二区三区国产精品乱码| 人人妻人人澡欧美一区二区| 我要搜黄色片| 欧美另类亚洲清纯唯美| 久久香蕉精品热| 国产av不卡久久| 亚洲成人久久爱视频| 在线观看舔阴道视频| 男人舔女人下体高潮全视频| 夜夜爽天天搞| 久久国产精品人妻蜜桃| 亚洲熟女毛片儿| 亚洲熟妇中文字幕五十中出| 久久九九热精品免费| 精品久久久久久久人妻蜜臀av| 国产三级中文精品| 国产亚洲精品久久久久5区| 校园春色视频在线观看| 小说图片视频综合网站| 久久久水蜜桃国产精品网| 精品一区二区三区四区五区乱码| 国产亚洲精品一区二区www| 少妇人妻一区二区三区视频| 国产精品久久久久久人妻精品电影| 男女床上黄色一级片免费看| 精品欧美国产一区二区三| 午夜日韩欧美国产| 2021天堂中文幕一二区在线观| 亚洲欧美一区二区三区黑人| 亚洲avbb在线观看| 国产精品亚洲一级av第二区| 99在线人妻在线中文字幕| 欧美色欧美亚洲另类二区| 欧美激情久久久久久爽电影| 在线免费观看的www视频| 日本一区二区免费在线视频| 香蕉久久夜色| 男女下面进入的视频免费午夜| 久久久久国内视频| 精品久久久久久久久久免费视频| 亚洲全国av大片| 亚洲欧美一区二区三区黑人| 制服人妻中文乱码| 国内少妇人妻偷人精品xxx网站 | 长腿黑丝高跟| 午夜激情福利司机影院| 日韩精品中文字幕看吧| 精品乱码久久久久久99久播| bbb黄色大片| 天天一区二区日本电影三级| 美女高潮喷水抽搐中文字幕| 久久久国产成人精品二区| 国产精品98久久久久久宅男小说| 99热只有精品国产| 三级毛片av免费| 老熟妇乱子伦视频在线观看| 国产高清视频在线观看网站| 国产亚洲欧美98| 免费无遮挡裸体视频| 88av欧美| 老司机午夜十八禁免费视频| 亚洲色图av天堂| 天堂动漫精品| 亚洲成a人片在线一区二区| 欧美不卡视频在线免费观看 | www.精华液| 成人av一区二区三区在线看| 国内毛片毛片毛片毛片毛片| 午夜久久久久精精品| 此物有八面人人有两片| 人成视频在线观看免费观看| av在线天堂中文字幕| 欧美成狂野欧美在线观看| 亚洲av成人一区二区三| 日韩欧美一区二区三区在线观看| 可以在线观看的亚洲视频| 日韩国内少妇激情av| 国产精品一及| 很黄的视频免费| 欧美日韩精品网址| 十八禁网站免费在线| 国产69精品久久久久777片 | 又黄又粗又硬又大视频| 美女黄网站色视频| av片东京热男人的天堂| 国产精品亚洲一级av第二区| 淫秽高清视频在线观看| 精品久久久久久成人av| 大型黄色视频在线免费观看| 两个人视频免费观看高清| 中文字幕最新亚洲高清| 日韩免费av在线播放| 男女视频在线观看网站免费 | 久久婷婷人人爽人人干人人爱| 久久香蕉激情| www日本在线高清视频| 老汉色av国产亚洲站长工具| 欧美丝袜亚洲另类 | 一个人观看的视频www高清免费观看 | 神马国产精品三级电影在线观看 | 成人永久免费在线观看视频| 精品国产美女av久久久久小说| 午夜老司机福利片| 又紧又爽又黄一区二区| 久久久久久国产a免费观看| 在线播放国产精品三级| 久久欧美精品欧美久久欧美| 老鸭窝网址在线观看| 9191精品国产免费久久| 国产精品久久久久久精品电影| 国产成人aa在线观看| 日本成人三级电影网站| 国产一区二区三区在线臀色熟女| 国产aⅴ精品一区二区三区波| 日韩欧美国产一区二区入口| 免费搜索国产男女视频| 看黄色毛片网站| 丰满人妻一区二区三区视频av | 啦啦啦观看免费观看视频高清| www日本黄色视频网| 国产av又大| 欧美日韩瑟瑟在线播放| av有码第一页| 91大片在线观看| 亚洲国产精品999在线| 午夜精品久久久久久毛片777| 精品福利观看| 亚洲无线在线观看| 亚洲人成网站高清观看| 精华霜和精华液先用哪个| 午夜激情福利司机影院| 亚洲国产高清在线一区二区三| 51午夜福利影视在线观看| 国产精品电影一区二区三区| 久久婷婷人人爽人人干人人爱| 国产成人欧美在线观看| ponron亚洲| 久久久久国内视频| 麻豆一二三区av精品| 久久天堂一区二区三区四区| 亚洲男人的天堂狠狠| 搡老岳熟女国产| 久久久精品国产亚洲av高清涩受| 亚洲一区二区三区色噜噜| 国产亚洲精品久久久久5区| 一级毛片高清免费大全| 国产私拍福利视频在线观看| 免费看日本二区| 婷婷精品国产亚洲av在线| 久久香蕉激情| 久久精品91蜜桃| 国产精品久久久久久人妻精品电影| 亚洲专区字幕在线| 亚洲狠狠婷婷综合久久图片| 精品久久蜜臀av无| 男女下面进入的视频免费午夜| 成人18禁在线播放| 国产精品香港三级国产av潘金莲| 国产日本99.免费观看| 国内少妇人妻偷人精品xxx网站 | 亚洲一码二码三码区别大吗| 亚洲av成人一区二区三| 欧美日韩中文字幕国产精品一区二区三区| 久久久精品大字幕| 国产高清激情床上av| 精品午夜福利视频在线观看一区| 女人高潮潮喷娇喘18禁视频| 在线观看免费午夜福利视频| 黄色 视频免费看| 日本一二三区视频观看| 变态另类成人亚洲欧美熟女| 亚洲av熟女| 两性午夜刺激爽爽歪歪视频在线观看 | 午夜免费激情av| 午夜激情av网站| 啪啪无遮挡十八禁网站| 亚洲最大成人中文| 欧美日韩乱码在线| 中文资源天堂在线| 成在线人永久免费视频| 日日夜夜操网爽| 深夜精品福利| 制服人妻中文乱码| 国产私拍福利视频在线观看| 在线播放国产精品三级| 午夜a级毛片| 色av中文字幕| 日韩精品免费视频一区二区三区| 精品日产1卡2卡| 美女大奶头视频| 亚洲第一欧美日韩一区二区三区| av天堂在线播放| 中文字幕精品亚洲无线码一区| 少妇粗大呻吟视频| 麻豆成人午夜福利视频| 精品国产超薄肉色丝袜足j| 午夜福利视频1000在线观看| 动漫黄色视频在线观看| 在线观看免费日韩欧美大片| 在线观看www视频免费| 久久精品91无色码中文字幕| 黄色成人免费大全| 日韩av在线大香蕉| 国语自产精品视频在线第100页| 狠狠狠狠99中文字幕| 亚洲最大成人中文| 精品国产乱码久久久久久男人| 国产熟女xx| 久久中文字幕一级| 国产成+人综合+亚洲专区| 少妇裸体淫交视频免费看高清 | 伊人久久大香线蕉亚洲五| 亚洲人与动物交配视频| 99久久久亚洲精品蜜臀av| 久久午夜亚洲精品久久| 少妇粗大呻吟视频| 黄色片一级片一级黄色片| 悠悠久久av| 久久午夜亚洲精品久久| 国产亚洲精品久久久久久毛片| 黄片大片在线免费观看| 不卡一级毛片| 久99久视频精品免费| 不卡av一区二区三区| 久久精品91蜜桃| 国产精品 国内视频| netflix在线观看网站| 国产视频一区二区在线看| 19禁男女啪啪无遮挡网站| 50天的宝宝边吃奶边哭怎么回事| 一二三四社区在线视频社区8| 国内精品久久久久精免费| 午夜福利18| 色综合欧美亚洲国产小说| 天天躁狠狠躁夜夜躁狠狠躁| 禁无遮挡网站| 久久婷婷成人综合色麻豆| 亚洲成av人片免费观看| 天天一区二区日本电影三级| 少妇裸体淫交视频免费看高清 | 免费观看精品视频网站| 长腿黑丝高跟| 亚洲人与动物交配视频|