4

第一个操作比第二个快吗?

  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 ?

4

3 回答 3

15

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

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

于 2012-04-30T14:54:31.830 回答
6

使用分析器并观察生成的机器代码

执行时间不太可能有任何差异,因为编译器可能会将两者优化为相同的机器代码。

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

. . . 如果两者都给出相同的性能使用:

u+= u*10  //second operation 

..只是因为它一目了然更容易理解。

于 2012-04-30T14:54:44.510 回答
4

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

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

如有疑问,请提供个人资料。

于 2012-04-30T14:55:24.700 回答