这可能是一个愚蠢的问题,但这种优化有时会提高应用程序的性能。在这里我专门询问 C++,因为 C++ 编译代码的方式与 c# 或 Java 有很大不同。
问题是,如果变量 i 是 int,那么哪一个表现更好。
i > -1
i >= 0
我正在寻找所需的内存块或寄存器以及两种条件所需的 CPU 周期方面的性能。
提前致谢。
这可能是一个愚蠢的问题,但这种优化有时会提高应用程序的性能。在这里我专门询问 C++,因为 C++ 编译代码的方式与 c# 或 Java 有很大不同。
问题是,如果变量 i 是 int,那么哪一个表现更好。
i > -1
i >= 0
我正在寻找所需的内存块或寄存器以及两种条件所需的 CPU 周期方面的性能。
提前致谢。
在汇编语言中,两者的结构相同:
i > -1
cmp [register with i value],-1
jg [somewhere]
i >= 0
cmp [register with i value],0
jge [somewhere]
根据使用的跳转标志,指令jg
进行两个标志比较(ZF = 0 和 SF = OF)但jge
只做一个(SF = OF)。
所以我很想说两者都使用几乎相同的寄存器和 CPU 周期,对于i >= 0
.
好吧,根据逻辑>操作可能比> =“便宜”,但我猜你正在编译优化选项,所以编译器可能会做任何他想做的事情来优化你的代码,所以我会说没关系,即使一个真的更快,也可能编译器将其更改为最佳选项
for (i = 0; i < 1000; i++)
在编写 for 循环时,将其从to转换可能是有益的,for (i = 1000; i > 0; i--)
因为在某些架构上,编译器可以跳过比较指令,因为当 i 达到 0 时将设置一个标志。在现代架构上,我不确定它是否重要。