C++优化:把频繁操作的成员变量局部化
2016-01-20 16:25
405 查看
当我们在类成员函数中频繁操作类成员变量时(例如,在for循环中反复调用成员变量),我们可以把该成员变量复制到成员函数中,成为局部变量,帮助编译器更好的优化循环体,因为成员变量对编译器来说更容易追踪。
例如下面程序,在operator()的for循环中反复调用成员变量m_i:
执行时间大约为0.38s。
![](http://img.blog.csdn.net/20160120162230424)
在operator()中把成员变量m_i复制到局部变量i上:
执行时间大约为0.35s,和没有局部处理相比快了0.03s,这是一个较大的性能提高。
例如下面程序,在operator()的for循环中反复调用成员变量m_i:
// main.cpp #include <iostream> #include "tbb/tbb.h" using namespace std; using namespace tbb; #define NUM 100000000 class Body { public: Body():m_i(1) {} ~Body() {} void operator()() { int sum = 0; for (int i = 0; i < NUM; i++) { sum += m_i; // 反复调用成员变量m_i } } int m_i; }; int main(int argc, char** args) { tick_count start = tick_count::now(); Body bd; bd(); cout << "consume time is:" << (tick_count::now() - start).seconds() << endl; return 0; }
执行时间大约为0.38s。
在operator()中把成员变量m_i复制到局部变量i上:
#include <iostream> #include "tbb/tbb.h" using namespace std; using namespace tbb; #define NUM 100000000 class Body { public: Body():m_i(1) {} ~Body() {} void operator()() { int sum = 0; int i = m_i; for (int i = 0; i < NUM; i++) { sum += i; // 反复调用局部变量i } } int m_i; }; int main(int argc, char** args) { tick_count start = tick_count::now(); Body bd; bd(); cout << "consume time is:" << (tick_count::now() - start).seconds() << endl; return 0; }
执行时间大约为0.35s,和没有局部处理相比快了0.03s,这是一个较大的性能提高。
相关文章推荐
- C++11的一些新特性
- C#调用C++DLL
- 用C语言实现数组反序
- C_作用域、链接属性和储存类型
- 浅谈C++多态性 & C++虚继承的实现方式与内存布局
- C语言再学习之进制转换总结
- vc++加载透明png图片方法——GDI+和CImage两种
- C++移位运算符详解
- C语言 百炼成钢1
- C++Primer第五版 12.1.4节练习
- C语言中static变量详解
- C++类继承下的赋值运算符
- C语言中exit(0)与exit(1)有什么区别
- C++ template —— 深入模板基础(二)
- Visual C++ : H, Lib, DLL配置!
- C++(一)
- C++ Primer Plus(第六版)读书笔记(二)
- 求次方和
- C++中placement new操作符(经典)
- 从一简单程序看C语言内存分配