c++的发展速度日新月异,特别是c++17以来,很多新功能让你赞叹不已,特别是对高性能与多线程的方法有了很多新东西。今天介绍几种提高c++性能的方法。
1、提高for循环,百分之九十的人可能想到:

for(size_t i=0;i<size();i++{
}

这是特别不推荐的写法,对于

i++;
++i;

尤其推荐后者,因为i++先保存自身的值再加1,比++i多了一步时间损耗,另外两者在大多数情况下实现的效果几乎是一样的。
2、平方运算:

a=pow(a,2.0);//法一
a=a*a;//法二

在内置硬件乘法器的单片机中,乘法运算比乘方运算快得多,具体原因不细讲……
3、用移位实现乘除法运算:

a*=4;
b/=4;

可以改为:

a=a<<2;
b=b>>2;

4、避免无必要的除法运算,整数除法是整数运算中最慢的:
例如

int i,j,k,m;
m=i/j/k;

可以改为

int i,j,k,m;
m=i/(j*k);

这是经典的速度优化,但许多编译程序(如gcc -funroll-loops)能自动完成这个事,所以现在你自己来优化这个显得效果不明显。

旧代码:

for (i = 0; i < 100; i++)
{
  do_stuff(i);
}

新代码:

for (i = 0; i < 100; )
{
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
  do_stuff(i); i++;
}

可以看出,新代码里比较指令由100次降低为10次,循环时间节约了90%。不过注意:对于中间变量或结果被更改的循环,编译程序往往拒绝展开(怕担责任呗),这时候就需要你自己来做展开工作了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐