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;

 



转载于:https://www.cnblogs.com/Yu-900914/p/10048075.html

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值