这是一位高级经理在面试时问的问题。
哪个更快?
while(1) {
// Some code
}
or
while(2) {
//Some code
}
我说过两者具有相同的执行速度,因为while中的表达式最终应求值为true或false。在这种情况下,两者都求值为true,并且while条件中没有额外的条件指令。因此,两者将具有相同的执行速度,我更喜欢while(1)。
但面试官自信地说:
“检查你的基本知识。While(1)比While(2)快。”
(他不是在试探我的信心)
这是真的吗?
请参见:“for(;;)”是否比“while (TRUE)”快?如果不是,人们为什么要使用它?
你的解释很正确。这似乎是一个在技术知识之外考验你自信的问题。
顺便说一下,如果你回答了
这两段代码同样快,因为它们都需要无限长的时间来完成
面试官会说
但是虽然(1)每秒可以做更多的迭代;你能解释一下原因吗?(这是无稽之谈;再次考验你的信心)
所以,通过像你那样回答,你节省了一些时间,否则你会浪费在讨论这个糟糕的问题上。
下面是编译器在我的系统(MS Visual Studio 2012)上生成的示例代码,优化关闭:
yyy:
xor eax, eax
cmp eax, 1 (or 2, depending on your code)
je xxx
jmp yyy
xxx:
...
打开优化后:
xxx:
jmp xxx
因此生成的代码是完全相同的,至少在优化编译器中是如此。