加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C表达式 – 两者中哪一个更快?

发布时间:2020-12-16 09:58:38 所属栏目:百科 来源:网络整理
导读:我一直在尝试C,我对两个脚本的性能特别感兴趣. 小介绍: 我有一个名为Point的类,用于试验极坐标中给出的点.该类包含两个私有双变量,通常的函数get,set和public函数rotate,它接受一个double参数并将其添加到极坐标形式的当前角度以生成一个新的Point对象. 下
我一直在尝试C,我对两个脚本的性能特别感兴趣.
小介绍:

我有一个名为Point的类,用于试验极坐标中给出的点.该类包含两个私有双变量,通常的函数get,set和public函数rotate,它接受一个double参数并将其添加到极坐标形式的当前角度以生成一个新的Point对象.

下面是关于函数rotate的两个不同脚本:

void Point::rotate(double theta) {
    double A = getA();
    A += theta;
    setA(A);
}

void Point::rotate(double theta) {
    setA(getA() + theta);
}

我的问题很简单:

哪一个实际上更快,为什么?

我知道第一种方法必须使用getA()然后将其保存到变量A中,因此最有可能的是,它需要更长时间/效率更低.
更一般地说,在计算表达式时,是否需要将表达式的大部分保存在其他变量中然后使用它们?
(夸大的假设是,编写代码的“人”不会犯错误,所有可能必须稍后阅读代码的人都会完全理解它.)

一个简单的例子来澄清我的问题:

假设我们想要计算一个b c.将b保存在一个新变量中更好,比方说d,然后将d添加到c?如何用参数调用函数另一个函数评估?

提前致谢!

解决方法

这两个表达式都是相同的.理想情况下,您总是可以运行一个基准测试,在该基准测试中,您可以在循环中多次调用表达式并查看时间差.

然而,另一种看待它的方法是回答问题的第二部分,即第二部分.当代码转换为汇编时,无论如何都将b存储在某个寄存器中,然后添加到c中,因为汇编中不存在3个图形添加的操作.所以,在以下方面没有区别:

c =  a + b + c

d = a + b
c = c + d

此外,许多其他优化都是由编译器完成的,这导致这些事情没有区别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读