在 C++ 中,i>-1 或 i>=0 哪个更好

In C++, which is better i>-1 or i>=0

这可能是个愚蠢的问题,但这种优化有时会提高应用程序的性能。 在这里我特别要求 C++,因为 C++ 编译代码的方式与 c# 或 Java.

有很大不同

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

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

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

提前致谢。

嗯,根据逻辑 > 操作可能 "cheaper" 而不是 >=,但我猜你在编译时启用了优化选项,所以编译器可能会做任何他想做的事情来优化你的代码,所以我会说那没关系,即使一个真的更快,也可能编译器将其更改为最佳选择

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

  1. i > -1

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

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

根据 used jump flags,指令 jg 进行两个标志比较(ZF = 0 和 SF = OF),但 jge 只进行一次比较(SF = OF)。

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

的比较可能要快一些

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