Ce qui est plus rapide: while(1) ou de tout(2)?

C'était une interview à la question posée par un senior manager.

Qui est le plus rapide?

while(1) {
    //Some code
}

ou

while(2) {
    //Some code
}

J'ai dit que les deux ont la même vitesse d'exécution, comme l'expression à l'intérieur de while faut enfin évaluer à true ou false. Dans ce cas, à la fois d'évaluer la true et il n'y a pas extra instructions conditionnelles à l'intérieur de la while condition. Ainsi, les deux auront la même vitesse d'exécution et je préfère tout (1).

Mais l'enquêteur a dit avec confiance:
"Vérifiez vos bases. while(1) est plus rapide que while(2)."
(Il n'était pas test ma confiance)

Est-ce vrai?

Voir aussi: Est "for(;;)" plus rapide que le "while (TRUE)"? Si non, pourquoi les utiliser?

  • Une demi-décent compilateur d'optimiser à la fois les formes à rien.
  • Dans optimisé la construction de tout alors que(n), n != 0 ou for(;;) sera traduit de l'Assemblée boucle sans fin avec l'étiquette de début et de goto dans la fin. Exactement le même code, la même performance.
  • Pas étonnant, un stock d'optimiser apporte 0x100000f90: jmp 0x100000f90 (adresse varie, évidemment) pour les deux extraits. L'intervieweur probablement couvert sur un registre de test par rapport à un simple pavillon de saut. À la fois la question, et leur supposition, est boiteux.
  • Cette question de l'intervieweur tombe sous les mêmes auspices que dilbert.com/strips/comic/1995-11-17 - vous allez rencontrer quelqu'un qui croit fondamentalement ce qu'ils sont en train de dire quel que soit le quotient de la stupidité dans leur déclaration. Simplement choisissez parmi les options suivantes: une profonde breat, de jurer, de rire, de pleurer, une combinaison de ce qui précède 🙂
  • W: on peut se demander ce qu'est un compilateur doit faire: traduire un Arrêt de déclaration, ou de considérer que la boucle s'arrête après un temps infini et optimiser loin l'infini de retard ?
  • Apparemment, les compilateurs sont autorisés à optimiser disparaître complètement (voir ce c++ question ou cette discussion - de la recherche pour "C1X" pour un devis de la Norme), et certains compilateurs vraiment le faire (le dernier lien mentionne lesquels).
  • alors, comment expliquez-vous que -1 est plus lent que 0?
  • La question ne demande pas qui parcourt plus rapidement au moment de l'exécution, ou qui compile en un temps plus court. Il demande simplement à ce qui est plus rapide. Par conséquent, celui qui est premier est clairement le plus rapide des deux choix; ainsi, alors que(1) doit être plus rapide. DUH
  • Peut-être qu'ils étaient à la recherche pour vous de préciser si elles étaient à la recherche pour compiler vs temps d'exécution. Je ne suis pas certain qu'ils vont avoir le même temps de compilation, que j'ai pu voir certains compilateurs avoir un début de "while(1)" et "while(true)" et sinon, de le transmettre à un plus générique const-évaluateur d'expression.
  • Comme @MooseBoys mentionne. Ma première pensée a été également qu'il peut être de parler de temps de construction plutôt que de courir de temps. Ce serait bien si ceci pourrait être étudié en quelque sorte.
  • Cette question est peut-être juste pour attirer les votes, mais c'est justement de sujet pour Stack Overflow.
  • Mike W: Non, il allait laisser les boucles intacte. Le compilateur ne doit pas changer le sens du programme. Si le programme n'est pas arrêter, il doit rester de cette façon.
  • Je pense que c'est plus rapide à écrire while(1) que de l'écrire while(2). Il se trouve que je viens de commander une nouvelle mécanique crayon hors de Amazon. Je vais courir quelques repères dès qu'il arrive.
  • L'examinateur était mort incorrect, le plus rapide est sans aucun doute while (0) 😉
  • Cette question était tout plagié sur Quora: quora.com/Programming-Which-is-faster-while-1-or-while-2
  • C'est une vieille question, mais pour les futurs enquêteurs là: while (42) { ... } est certainement le plus lent, en vertu de tout niveau d'optimisation, avec un compilateur. Et effectivement, return 42; s'exécute plus lentement que le renvoi de toute autre valeur. Après tout... en Fait, sur une note plus sérieuse, si j'ai vraiment fait voir while (42) je voudrais savoir exactement ce que l'auteur a été de penser, et d'être en mesure de passer tout de suite de trop.
  • Vous devriez toujours demander pourquoi, lorsque vous rencontrez ce genre de chose. Il y a beaucoup de désinformation là-bas, et les enquêteurs ne sont pas à l'abri. L'intervieweur est mort à plat de mal dans ce cas. Compilateur écrivain parle ici. Il est aussi un peu stupide question d'entrevue: quelle différence cela fait-il dans la pratique? Qui se passe vraiment à écrire while (2)? Juste une occasion pour l'interviewer pour montrer son ignorance.

InformationsquelleAutor Nikole | 2014-07-20