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

            久久国产香蕉视频| WWW婷婷AV久久久影片| 久久se精品一区精品二区国产| 午夜不卡888久久| 久久久受www免费人成| 色综合久久夜色精品国产| 一本一本久久a久久综合精品蜜桃| 国产V亚洲V天堂无码久久久| 99久久精品久久久久久清纯| 久久国产亚洲精品| 999久久久免费国产精品播放| 久久青青国产| 国产精品久久久久无码av| 久久久精品久久久久久 | 伊人久久大香线蕉亚洲五月天| 精品无码久久久久久尤物| 久久精品无码专区免费| 日韩AV无码久久一区二区| 国产99久久久国产精免费| av色综合久久天堂av色综合在| 九九久久99综合一区二区| 久久婷婷人人澡人人爽人人爱| 91精品国产综合久久四虎久久无码一级| 久久人人爽人人爽AV片| 久久婷婷国产综合精品| 一本大道久久香蕉成人网| 色欲综合久久躁天天躁蜜桃| 九九久久精品国产| 国产成人无码精品久久久久免费 | 99久久国产亚洲综合精品| 亚洲国产精品久久久久婷婷老年 | 国内精品久久久久久久亚洲 | 亚洲国产小视频精品久久久三级| 国产精品久久久久久搜索| 亚洲AV无码久久精品蜜桃| 丁香色欲久久久久久综合网| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 91久久婷婷国产综合精品青草 | 久久AⅤ人妻少妇嫩草影院| 久久精品国产免费一区| 成人久久久观看免费毛片|