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

            Zero Lee的專欄

            The Return Value Optimization[1]

            Resource from the book:
            Dov Bulka & David Mayhew <Efficient C++--- Performance programming Techiques>

            Anytime you can skip the creation and destruction of an object, you are looking at a performance gain. We will discuss an optimization often performed by compilers to speed? up your source code by transforming it and eliminating object creation. This optimization is referred to as the Return Value Optimization(RVO). Prior to delving into the RVO we need to understand how return-by-value works. We will walk through it with a simple example.

            The Mechanics of Return-by-Value
            The Complex class implements a representation for complex numbers:

            ?1 class ?Complex
            ?2
            {
            ?3 ??? // ?Complex?addition?operator

            ?4 ??? friend?Complex? operator ? + ( const ?Complex & ,? const ?Complex & );
            ?5 public
            :
            ?6 ??? //
            ?default?constructor
            ?7 ??? //
            ?Value?defaults?to?0?unless?otherwise?specified
            ?8 ??? Complex( double ?r? = ? 0.0 ,? double ?i? = ? 0.0 ):real(r),?imag(i)? {?}

            ?9
            10 ??? // ?copy?constructor

            11 ??? Complex( const ?Complex & ?c):real(c.real),?imag(c.imag)? {?}
            12
            13 ??? // ?Assignment?operator

            14 ??? Complex & ? operator ? = ( const ?Complex & ?c);
            15

            16 ??? ~ Complex()? {?}

            17 private :
            18 ??? double
            ?real;
            19 }
            ;
            The addition operator returns a Complex object by value, as in:
            1 Complex? operator ? + ( const ?Complex & ?a,? const ?Complex & ?b)
            2
            {
            3
            ????Complex?retVal;
            4 ????retVal.real? = ?a.real? +
            ?b.real;
            5 ????retVal.imag? = ?a.imag? +
            ?b.imag;
            6 ???? return
            ?retVal;
            7 }
            Suppose c1, c2, and c3 are Complex and we excute
            c3 = c1 + c2;
            How do we get the value of c1 + c2 into c3? One popular technique used by compilers is to create a temporary __result object and pass it into Complex::operator +() as a third argument. It is passed by referece. So the compiler rewrites
            1 Complex & ?Complex:: operator ? + ( const ?Complex & ?c1,? const ?Complex & ?c2)
            2
            {
            3
            ??
            4 }
            into a slightly different function:
            1 void ?Complex_Add( const ?Complex & ?__result,? const ?Complex & ?c1,? const ?Complex & ?c2)
            2
            {
            3
            ???
            4 }
            Now the original source statement
            c3 = c1 + c2;
            is transformed into(pseudocode):
            1 struct ?Complex?__tempResult;? // ?Storage.?No?constructor?here.
            2 Complex_Add(__tempResult,?c1,?c2);? // ?All?argument?passed?by?reference.
            3 c3? = ?__tempResult;? // ?Feed?result?back?into?left-hand-side.
            This return-by-value implementation opens up an optimization opportunity by eliminating the local object RetVal(inside operator +()) and computing the return value directly into the __tempResult temporary object. This is the Return Value Optimization.

            posted on 2006-11-13 19:01 Zero Lee 閱讀(268) 評論(0)  編輯 收藏 引用 所屬分類: C++ Performance

            国产高清国内精品福利99久久| 青草国产精品久久久久久| 色综合色天天久久婷婷基地| 青青草国产精品久久久久| 久久久久九国产精品| 久久综合给合久久狠狠狠97色| 国产一久久香蕉国产线看观看| 久久久99精品成人片中文字幕 | 精品久久香蕉国产线看观看亚洲 | 久久久99精品一区二区| 精品国产乱码久久久久软件| 色综合久久中文色婷婷| 亚洲AV无一区二区三区久久 | 93精91精品国产综合久久香蕉| 伊人情人综合成人久久网小说| 97精品国产91久久久久久| 天堂无码久久综合东京热| 91精品国产91久久久久久| 久久久久99精品成人片试看| 伊人久久大香线蕉精品不卡| 久久久精品视频免费观看 | 久久久久久久综合狠狠综合| 99久久精品无码一区二区毛片| 色婷婷综合久久久中文字幕 | 日本精品一区二区久久久| 久久久久四虎国产精品| 国产人久久人人人人爽| 亚洲精品无码专区久久久| 欧美亚洲日本久久精品| 精品久久久久国产免费| 国产精品成人99久久久久91gav| 欧美久久综合性欧美| 免费国产99久久久香蕉| 久久―日本道色综合久久| 久久精品国产一区二区三区日韩| 久久精品水蜜桃av综合天堂 | 久久人妻少妇嫩草AV蜜桃| 久久露脸国产精品| 亚洲婷婷国产精品电影人久久| 怡红院日本一道日本久久| 中文精品久久久久国产网址|