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