10

这可能是一个愚蠢的问题,但这种优化有时会提高应用程序的性能。在这里我专门询问 C++,因为 C++ 编译代码的方式与 c# 或 Java 有很大不同。

问题是,如果变量 i 是 int,那么哪一个表现更好。

  1. i > -1
  2. i >= 0

我正在寻找所需的内存块或寄存器以及两种条件所需的 CPU 周期方面的性能。

提前致谢。

4

3 回答 3

16

在汇编语言中,两者的结构相同:

  1. i > -1

    cmp   [register with i value],-1
    jg    [somewhere]
    
  2. i >= 0

    cmp   [register with i value],0
    jge   [somewhere]
    

根据使用的跳转标志,指令jg进行两个标志比较(ZF = 0 和 SF = OF)但jge只做一个(SF = OF)。

所以我很想说两者都使用几乎相同的寄存器和 CPU 周期,对于i >= 0.

于 2015-05-22T11:03:20.570 回答
2

好吧,根据逻辑>操作可能比> =“便宜”,但我猜你正在编译优化选项,所以编译器可能会做任何他想做的事情来优化你的代码,所以我会说没关系,即使一个真的更快,也可能编译器将其更改为最佳选项

于 2015-05-22T11:02:34.547 回答
0

for (i = 0; i < 1000; i++)在编写 for 循环时,将其从to转换可能是有益的,for (i = 1000; i > 0; i--)因为在某些架构上,编译器可以跳过比较指令,因为当 i 达到 0 时将设置一个标志。在现代架构上,我不确定它是否重要。

于 2015-05-22T11:11:10.253 回答