这可能是一个愚蠢的问题,但是这种优化有时可以提高应用程序的性能。
我具体地问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)。i >= 0
有非常轻微的比较更快。if (something)
和if (something && something_else)
之间哪个更慢? - Aracthor根据逻辑,>操作可能比>=操作“更便宜”,但我猜您启用了优化选项进行编译,所以编译器可能会对您的代码进行优化,因此我认为这并不重要,即使其中一个真正更快,编译器也可能将其更改为最佳选项。
在编写for循环时,将其从for (i = 0; i < 1000; i++)
转换为for (i = 1000; i > 0; i--)
可能会有益处,因为在某些体系结构上,当i达到0时,编译器可以跳过比较指令,因为一个标志位将被设置。在现代体系结构中,我不确定这是否重要。