c++ 运算运行效率的提高技巧

Posted yu-900914

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ 运算运行效率的提高技巧相关的知识,希望对你有一定的参考价值。

尽量避免使用值传递,推荐使用const 引用来传递参数

临时变量的代价。

循环体中的局部变量,尽量在循环体内定义

 复制操作与构造析构函数的代价差异。

 避免过大的循环

cache的时间局限性和空间局限性

时间局限性:如果一个存储单元被访问,则可能该单元会很快再次被访问,因为存在循环;
空间局限性:如果一个存储单元被访问,则可能该单元临近的单元也可能很快被访问,因为程序中大部分指令是顺序存储,
数据也一般是集中在一起的。
如果循环体的空间代价大于cache的容量,则不能充分利用cache了,因为cache需要与内存交换代码指令和数据。

局部变量的效率高于静态变量

 尽量减少除法的使用

无论对于整数还是浮点数,出发都是一个运算速度很慢的指令。以下的一些简单方法可以用来来提高效率:

  • 用 if(a*n > b) 来代替 if(a>b/n) ;
  • 尽量使用无符号整形变量;
  • 除数使用常量有利于编译器优化,也可以用const来修饰变量达到目的;
  • 使用 x << 3 代替 x/8;
  • 使用 x&7 代替 x/8;

将小粒度函数申明为内联函数(inline)

多使用构造函数初始化代替赋值初始化

构造函数与临时变量&赋值的代价差异。

尽量减少循环的嵌套层数,尝试使用多个循环代替

跳转和分支执行代价高,如果可能尽量少用

  • 函数调用需要两次跳转,外加栈内存操作;
  • 尽量减少再循环内调用函数;
  • 尽量使用switchcase 代替 较长的 ifelse分支;

对于优先使用 += -= 代替 + -;
而对于基本类型优先使用 + - 而不是 += -=;

 如果你需要初始化一大段的内存,尽量使用 memset 代替赋值

++ i 代替 i++

13.

1 c = a+b;
2 d = a+b+e;
3 f = a+b+g;

优化为

1 c = a+b;
2 d = c+e;
3 f = c+g;

充分利于CPU的流水

利用CPU的流水来做并行计算,比如:

优化前

1 for (int i = 0; i < len; i++)
2 {
3     sum += a[i];
4 }

优化后:

1 for (int i = 0; i < len; i = i + 4)
2 {
3     sum1 += a[i];
4     sum2 += a[i + 1];
5     sum3 += a[i + 2];
6     sum4 += a[i + 3];
7 }
8 sum + sum1 + sum2 + sum3 + sum4;

 









以上是关于c++ 运算运行效率的提高技巧的主要内容,如果未能解决你的问题,请参考以下文章

提高代码效率的 20 个JavaScript 技巧和窍门

提高代码效率的 20 个JavaScript 技巧和窍门

编程技巧│提高 Javascript 代码效率的技巧

提高Python运行效率的5个技巧

技巧总结java位运算

C++程序运行效率的10个简单方法