我一直在尝试C ++,并且我对两个脚本的性能特别感兴趣。一个小介绍:
我有一个叫Point的类,用于试验极坐标中给定的点。该类包含两个私有的double变量,通常的函数get,set和public函数rotation带有一个double参数,并将其以极坐标形式添加到我们当前的角度中,以生成一个新的Point对象。
下面是函数旋转的两个不同脚本:
void Point::rotate(double theta) {
double A = getA();
A += theta;
setA(A);
}
void Point::rotate(double theta) {
setA(getA() + theta);
}
我的问题很简单:
哪一个实际上更快,为什么?
我知道第一种方法必须使用getA(),然后将其保存到变量A中,这样很可能会花费更长的时间/效率更低。一般来说,在计算表达式时,是否有必要将表达式的大部分保存在其他变量中,然后再使用这些变量?(在夸大的假设下,编写代码的“人”不会犯错误,以后可能需要阅读代码的每个人都会完全理解它。)
一个简单的例子来澄清我的问题:
假设我们要计算a + b + c。将a + b保存到新变量(例如d),然后将d添加到c更好?带有参数的另一个函数求值函数调用怎么样?
提前致谢!
这两个表达式都是相同的。理想情况下,您始终可以运行一个基准测试,在该基准测试中您可以循环调用多次表达式并查看时差。
但是,另一种看待问题的方法是回答问题的第二部分,该问题涉及a+b+c
。当代码将转换为汇编时,a+b
无论如何将其存储在某个寄存器中,然后添加到中c
,因为汇编中不存在用于添加3位数字的操作。因此,在以下方面没有区别:
c = a + b + c
和
d = a + b
c = c + d
同样,编译器还完成了许多其他优化,从而导致这些事情无济于事。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句