C++ 编译器优化之 RVO 与 NRVO

C++ 编译器优化之 RVO 与 NRVO

RVO 即 “Return Value Optimization”,是一种编译器优化技术,通过该技术编译器可以减少函数返回时生成临时值值(对象)的个数,从某种程度上可以提高程序的运行效率,对需要分配大量内存的类对象其值复制过程十分友好。NRVO 全称为 “Named Return Value Optimization”,该优化的大致流程与 RVO 类似。

首先我们来编写一个基本的 C++ 类。在这个类中,我们定义了该类的构造函数、拷贝构造函数、移动构造函数以及析构函数,以此来观察开启/关闭编译器 RVO 优化时对程序运行结果的影响。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class A {
 5   public:
 6     A() {cout << "[C] constructor fired." << std::endl; }
 7 
 8     A(const A &a) { cout << "[C] copying constructor fired." << std::endl; }
 9 
10     A(A &&a) { cout << "[C] moving copying constructor fired." << std::endl; }
11 
12     ~A() { cout << "[C] destructor fired." << std::endl; }
13 };
14 
15 A getTempA() { return A(); }
16  
17 int main(int argc, char **argv) 
18 {
19   auto x = getTempA();
20   return 0;
21 }

 

#include <iostream>
using namespace std;

class A {
  public:
    A() {cout << "[C] constructor fired." << std::endl; }

    A(const A &a) { cout << "[C] copying constructor fired." << std::endl; }

    A(A &&a) { cout << "[C] moving copying constructor fired." << std::endl; }

    ~A() { cout << "[C] destructor fired." << std::endl; }
};

A getTempA() { return A(); }
 
int main(int argc, char **argv) 
{
  auto x = getTempA();
  return 0;
}

 


find(beg, end, val);
equal(beg1, end1, beg2);
fill(beg, end, val);
fill_n(beg, cnt, val);
accumululate(beg, end ,val);
unqiue(beg, end);
reverse(beg, end);

 

 

  

参考资料

1. C++ 编译器优化之 RVO 与 NRVO

  

posted @ 2019-03-27 19:03  苏格拉底的落泪  阅读(376)  评论(0编辑  收藏  举报