与其他任何数字相比,比零快吗?

dea*_*sin 6 c++ optimization compare zero

if(!test)
Run Code Online (Sandbox Code Playgroud)

比...快

if(test==-1)
Run Code Online (Sandbox Code Playgroud)

我可以生产组装,但是生产了太多的组件,我无法找到我追求的细节.我希望有人知道答案.我猜它们是相同的,除非大多数CPU架构都有某种"比较为零"的捷径.

谢谢你的帮助.

Sam*_*all 7

通常,是的.在典型的处理器中测试零或测试符号(负/正)是简单的条件代码检查.这意味着可以重新排序指令以省略测试指令.在伪装配中,请考虑以下因素:

Loop:
  LOADCC r1, test // load test into register 1, and set condition codes
  BCZS   Loop     // If zero was set, go to Loop
Run Code Online (Sandbox Code Playgroud)

现在考虑对1进行测试:

Loop:
  LOAD   r1, test // load test into register 1
  SUBT   r1, 1    // Subtract Test instruction, with destination suppressed
  BCNE   Loop     // If not equal to 1, go to Loop
Run Code Online (Sandbox Code Playgroud)

现在通常的预优化免责声明:你的程序太慢了吗?不要优化,分析它.

  • ~100ns适用于运行频率为10MHz的处理器.在过去的十几年里,任何不打算运行Watch或Toaster的东西都会比这更快.现代x86处理器将在0.5(2GHz)和0.25ns(4GHz)之间运行一条指令 - 并且在一个内核上并行执行三到四条指令,如果编译器做得不错的话.因此,每循环迭代100ns增益非常不合理. (2认同)