• <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 閱讀(263) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): C++ Performance

            久久涩综合| 99国产精品久久| 亚洲午夜福利精品久久| 四虎影视久久久免费观看| 久久久久久久久久久精品尤物| 久久久久久久久66精品片| 亚洲国产精品无码久久一区二区| 久久国产精品久久| 亚洲欧美日韩精品久久亚洲区 | 国产精品久久久久影院嫩草| 99久久99久久精品国产片| 色99久久久久高潮综合影院 | 国产2021久久精品| 久久综合鬼色88久久精品综合自在自线噜噜| 久久精品人人做人人爽电影| 亚洲午夜久久久精品影院| 欧美黑人又粗又大久久久| 久久丝袜精品中文字幕| 国产精品久久久久久| 中文字幕乱码久久午夜| 亚洲第一永久AV网站久久精品男人的天堂AV| 无码人妻精品一区二区三区久久| 久久精品18| 国产福利电影一区二区三区,免费久久久久久久精 | 久久久久亚洲AV成人网人人网站 | 99久久精品无码一区二区毛片 | 久久久久久久亚洲精品| 国产精品美女久久久久网| 欧美一区二区三区久久综合| 亚洲v国产v天堂a无码久久| 国产精品成人久久久久三级午夜电影 | 国产成人久久精品麻豆一区| 99久久777色| 国产精品久久国产精麻豆99网站| 久久99国产综合精品女同| 一本色道久久99一综合| 国产亚洲美女精品久久久2020| 久久无码中文字幕东京热 | 久久青青草原国产精品免费 | 久久久久综合国产欧美一区二区| 精品久久久久久无码国产|