与零比较是否比与任何其他数字比较快?

2022-01-25 00:00:00 optimization compare zero c++

if(!test)

快于

if(test==-1)

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

I can produce assembly but there is too much assembly produced and I can never locate the particulars I'm after. I was hoping someone just knows the answer. I would guess they are the same unless most CPU architectures have some sort of "compare to zero" short cut.

感谢您的帮助.

推荐答案

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

Typically, yes. In typical processors testing against zero, or testing sign (negative/positive) are simple condition code checks. This means that instructions can be re-ordered to omit a test instruction. In pseudo assembly, consider this:

Loop:
  LOADCC r1, test // load test into register 1, and set condition codes
  BCZS   Loop     // If zero was set, go to Loop

现在考虑针对 1 进行测试:

Now consider testing against 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

现在是通常的优化前免责声明:您的程序是否太慢?不要优化,分析它.

Now for the usual pre-optimization disclaimer: Is your program too slow? Don't optimize, profile it.

相关文章