第一次操作应该更快,如果是,那么为什么?

时间:2012-04-30 14:52:39

标签: c++

第一个操作是否比第二个更快?

  u+= (u << 3) + (u << 1) //first operation
  u+= u*10  //second operation 

基本上他们两个都做同样的事情u= u+(10*u) 但我开始知道第一次操作比第二次更快。 操作时的cpu时间是否与*不同。 Is multiplication by 10 actually equivalent to 10 addition operations being performed ?

3 个答案:

答案 0 :(得分:15)

这取决于底层CPU和编译器的功能。

任何体面的编译器都应该优先u*10进入适当的位移操作,如果它认为它们会更快。它可能无法做相反的事情。所以总是写u*10,如果你的意思是u*10,除非你知道你正在使用一个糟糕的编译器。

答案 1 :(得分:6)

使用 探查器 并观察生成的 计算机代码

执行时间不太可能存在差异,因为编译器可能会优化两个相同的机器代码。

我刚刚在2上进行了快速配置测试以断言我的主张。我制作了2个小二进制文件(每个操作一个)并定时执行以处理10e6整数值。两者都在我的机器上报告~38毫秒(mac i7使用g ++)。因此,可以安全地假设两者最终都以相同数量的操作结束。对于其他编译器/处理器组合,结果可能是相同的。

。 。 。如果两者都具有相同的性能用途:

u+= u*10  //second operation 

..只是因为一眼就能更容易理解。

答案 2 :(得分:4)

取决于编译器的翻译和处理器。有些处理器具有乘法单元,因此实际乘法只需要一条指令。

到目前为止,第一个要求至少3条指令。

如有疑问,请参阅。