以下代码段的性能有什么不同吗?哪一个表现最好,为什么?
int i = 1000000000;
while(i != 0) { i--; }
或
int i = 1000000000;
while(i) { i--; }
或
int i = 1000000000;
while(i > 0) { i--; }
我看到很多人用第一个例子,想知道为什么。更容易阅读?
在这种情况下它们都是相同的,任何像样的编译器都会为这三者生成相同的代码。在任何情况下,尝试手动优化像这样的琐碎事情(整数比较)是毫无意义的。您的编译器会找出它,并在代码生成期间比您做得更好。所以不要再尝试了,只要写出你能读的最可读的代码,然后信任编译器——在任何情况下,这些都不会对性能产生任何影响。
号以下代码段的性能有什么不同吗?
前两个是等价的,所有三个都可以优化成完全相同的汇编。
我看到很多人用第一个例子,想知道为什么。更容易阅读?
它要求读者知道的语言规则比第二种少。特别地,第二个程序需要知道条件表达式被转换为bool
,并且从int
转换得到与零不等式相同的结果。
注意,如果i
被替换为浮点数,或者如果减量被修改为更复杂(例如:减量2),那么第三个选项将是最容易证明正确的。对于整数和单次递减,没有区别。