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);
参考资料