关于优化:在C ++中,哪个更好i>-1或i> = 0

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

本问题已经有最佳答案,请猛点这里访问。

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

问题是,如果变量i是int,那么哪个执行得更好。

  • i > -1
  • i >= 0
  • 我在寻找性能方面的内存块或寄存器所需的和CPU周期所需的两个条件。

    事先谢谢。


    在汇编语言中,两者都在同一结构上:

  • i > -1

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

    1
    2
    cmp   [register with i value],0
    jge   [somewhere]
  • 根据使用的跳转标志,指令jg进行两个标志比较(zf=0和sf=of),但jge只做一个标志比较(sf=of)。

    所以我想说,两者使用几乎相同的寄存器和CPU周期,对i >= 0可能有一个更快的比较。


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


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