几种常用提高c++性能的方法
c++高性能
·
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%。不过注意:对于中间变量或结果被更改的循环,编译程序往往拒绝展开(怕担责任呗),这时候就需要你自己来做展开工作了。
更多推荐
已为社区贡献4条内容
所有评论(0)