none
RVO与NRVO RRS feed

  • 问题

  • visual studio 2010中C++编译器是否同时具有RVO(返回值优化)和NRVO(具名返回值优化)?

    如和设置优化选项?


    2014年8月27日 7:46

答案

  • 对于NRVO不同的人有一些不同的意见,有人认为NRVO只有显式存在拷贝构造函数才能进行优化,有人认为不是这样。我认为NRVO是对于RVO进行了一些扩展的新的编译器优化策略,NRVO避免了部分RVO的局限性,当然NRVO也有不能优化的时候,有它本身的局限性。这里有一个帖子对于NRVO进行了激烈的讨论你可以看看,仔细阅读下我的第一个回复里连接的内容,形成你自己的理解。<<深度探索C++对象模型>>的第70页关于编译器对拷贝构造函数优化的问题再讨论~~ 。

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 王立伟 2014年9月2日 2:22
    2014年8月28日 15:46

全部回复

  • 你好:

           RVO是一种消除创建用于保存函数返回值的临时对象的编译器技术;而NRVO是用于消除拷贝构造函数和析构函数基于堆栈

    的返回值,来优化拷贝构造函数和析构函数的多余的调用。关于NRVO请看:Named Return Value Optimization in Visual C++ 2005

           如果你启用了优化选项,RVO技术能一直提供优化,而只有涉及拷贝构造函数和析构的可优化事件发生,编译器就用NRVO

    技术,涉及RVO的可优化事件就用RVO编译器技术,所以我认为RVONRVO是没有互相排斥矛盾的地方,可以同时存在的。

    从上面关于NRVO的链接里可以知道,启用优化选项的方法project property->C\C++->Optimization->Optimization->/O2

           有什么问题请继续在论坛提问。

    Shu Hu


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2014年8月28日 6:20
  • 首先谢谢您的回答。

    我现在对RVO和NRVO有这么一种理解,您看看对不对:

    我认为RVO和NRVO其实是做了类似的工作的,只不过RVO是优化了临时的返回值,而NRVO是优化了具名的返回值。这两种优化如何实现,其实关键是我们如何书写return语句来实现的。

    就是如果我把return返回的临时值用一个具名的返回值(lvalue)来表达,然后再返回这个具名对象,那么编译器自然就会采用NRVO的优化方式。我如果不用具名对象代替这个临时值,而是直接返回这个临时值(rvalue),那么编译器就会采用RVO的方式来优化。

    我不知道这个两种优化具体如何实现,但关键还是要看我如何书写return语句,并且这两种优化会达到相同的效果。

    请您对我的理解作出评价。

    谢谢

    2014年8月28日 12:39
  • 对于NRVO不同的人有一些不同的意见,有人认为NRVO只有显式存在拷贝构造函数才能进行优化,有人认为不是这样。我认为NRVO是对于RVO进行了一些扩展的新的编译器优化策略,NRVO避免了部分RVO的局限性,当然NRVO也有不能优化的时候,有它本身的局限性。这里有一个帖子对于NRVO进行了激烈的讨论你可以看看,仔细阅读下我的第一个回复里连接的内容,形成你自己的理解。<<深度探索C++对象模型>>的第70页关于编译器对拷贝构造函数优化的问题再讨论~~ 。

    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 王立伟 2014年9月2日 2:22
    2014年8月28日 15:46
  • 谢谢您的帮助,我会再仔细的研究一下您提供的资料。
    2014年9月2日 2:22