Pourquoi n++ exécuter plus rapidement que n=n+1?

En langage C, Pourquoi ne n++ l'exécution est plus rapide que n=n+1?

(int n=...;  n++;)
(int n=...;  n=n+1;)

Notre instructeur posé cette question dans la séance d'aujourd'hui. (ce n'est pas de devoirs)

  • Ce qui est n? ___
  • Comment avez-vous trouvé ça? Sur le compilateur/OS/plate-forme/architecture?
  • Ce n'est pas, en général. Vous ne pouvez pas faire une déclaration significative que "a est plus rapide que b" (où a et b C sont des expressions). Il n'a de sens que de dire que "a est plus rapide que b sur le matériel c lorsqu'il est compilé avec la version d de compilateur e avec des options d'optimisation f" (et quelques autres exigences).
  • C'est clairement ce qui est demandé ici de l'exemple; tout simplement parce que la réponse semble évidente ne signifie pas que vous devriez la fermer. +1 pour les rouvrir.
  • Oui, je pense qu'il doit être rouvert..
  • Ce n'est pas une vraie question, car il se demande pourquoi un sens l'énoncé est vrai. Il pourrait aussi bien demander: "Pourquoi avez-green ideas sleep furiously?".
  • Canon: Au moins, il est vrai, parfois, dans le passé..
  • Donc l'interlocuteur devrait être corrigé dans la réponse. C'est toujours une bonne question, parce que quelqu'un d'autre peut venir à travers la même désinformation plus tard, et cette question sera d'aider à les trier
  • aussi, si vous vous sentez vraiment que la question ne devrait pas poser une fausse déclaration, n'hésitez pas à modifier pour qu'il "Est n++ plus vite que n = n + 1, et pourquoi?". C'est beaucoup plus constructif que de simplement fermer sans discussion 🙂
  • double possible de (C) Quelle est la différence entre ++i et i++
  • À moins que vous fournir un certain type de contexte, s'il vous plaît arrêter de rouler des modifications que le lien à des questions qui sont clairement liés à ce que vous demandez.
  • Et pour cette question, s'il vous plaît arrêter de revenir tente d'en faire une plus claire et pédagogique de la question; à moins d'y ajouter un commentaire si vous êtes en désaccord avec les modifications.
  • Je ne pense pas que cela devrait être dans le wiki de la communauté..
  • Trop tard. DONC convertit automatiquement une question à la Communauté Wiki si 5 personnes ou plus modifier une question.
  • Vote pour le rouvrir. Je ne vois pas comment ce n'est pas une vraie question. Tout simplement parce que l'OP a un mauvais enseignant, ne signifie pas que la question n'est pas légitime.
  • n++; et n=n+1; sera presque certainement compiler le même code machine sur n'importe quel compilateur moderne. Sur les premiers compilateurs C ce n'était pas le cas et que le compilateur serait seulement de réaliser qu'il pouvait utiliser le processeur cible de l'incrément de l'enseignement si vous lui avez dit n++. Sinon, il pourrait ne plus générale, à ajouter de l'instruction qui aurait été une plus grande instruction ou ont été deux instructions. Si votre instructeur vraiment vous a dit qu'il était plus rapide et n'était pas en parler en étant plus rapide pour vous de type "n++" que "n=n+1", puis il est mauvais. Essayez gcc -S prog.c;less prog.s
  • Il a été fermé, puis on les fixe dans une vraie question et rouvert, alors que l'OP est revenue et la question a été de nouveau fermé. Franchement, si l'OP va tirer ce genre de comportement, alors à mon humble avis il doit rester fermé.
  • Je crois que ce n'est pas une vraie question, car elle postule une fausse situation, et n'a pas de réponse. "Pourquoi les zèbres sont plus grandes que les éléphants?"
  • WTF pourquoi quelqu'un a mis une prime sur un wiki de la communauté avec l'accepté de répondre et de façon flagrante les prémisses fausses?!
  • La vraie question est: Pourquoi votre université permettre à un incompétent professeur pour enseigner?
  • Pour répondre à ma propre question: le fait d'avoir un bounty fait une question unclosable. Donc, apparemment, gcc mettre le bounty sur elle pour nous empêcher de le fermer.
  • Hey, je suis d'accord que ++n est plus optimisé que le n++. Mais n=n+1? LOL!
  • Soit vous vous moquez ou que vous avez raté que cette question est étiqueté C et pas du C++....
  • Je ne sais pas à propos de l'exécution, mais la compilation peut prendre en plaisantant petite quantité de moins de temps, puisque n=n+1; faudrait 2 octets de plus que n++; pour entrer dans la mémoire. Encore une fois cette hypothèse est peut-être vrai que pour certains pré-âge de pierre, ère, que nous avons maintenant de bloquer les lectures et les écritures et les choses...
  • Cette même question est sur la NASCAR blog "Mon frère de l'ami de l'oncle dit que sa voiture est plus rapide si c'est le numéro 01 de 10".
  • Wow je peux donner 5 +1? Vous avez failli m'a fait cracher mon café en riant.
  • double possible de quelle est la différence en termes d'efficacité de l'aide i++/++i/i+=1/i=i+1 si aucun optimisation du compilateur est utilisé