Pour construire sur MarkusQ réponse: ;)
Ou plutôt, le projet de Loi de commentaire à lui:
(Edit: Oh, le commentaire est reparti... Oh bien)
Ils sont autorisés à être évalué en parallèle. Si oui ou non il se passe dans la pratique est techniquement hors de propos.
Vous n'avez pas besoin de thread parallélisme pour ce faire cependant, l'évaluation de la première étape à la fois (prendre la valeur de i) avant la seconde (incrémenter i). Parfaitement légal, et certains compilateurs peuvent considérer qu'il est plus efficace que l'évaluation d'un i++ avant de commencer le deuxième.
En fait, j'avais peut s'attendre à une optimisation de la commune. Regardez à partir d'une planification d'instructions point de vue. Vous avez la suite vous avez besoin d'évaluer:
- Prendre la valeur de i pour le bon argument
- Incrément je dans le bon argument
- Prendre la valeur de i pour la gauche argument
- Incrémenter i de la gauche argument
Mais il n'y a vraiment pas de dépendance entre la gauche et la droite argument. L'Argument de l'évaluation qui se passe dans un ordre non spécifié, et n'a pas besoin d'être fait de manière séquentielle, soit (et c'est pourquoi new() dans les arguments de la fonction est généralement une fuite de mémoire, même quand enveloppé dans un pointeur intelligent)
C'est undefined aussi ce qui se passe lorsque vous modifiez la même variable deux fois dans la même expression.
Nous avons une dépendance entre 1 et 2, cependant, et entre 3 et 4.
Alors pourquoi le compilateur attendre 2 à terminer avant le calcul des 3? Qui introduit un temps de latence supplémentaire, et ça va prendre plus de temps que nécessaire avant le 4 devient disponible.
En supposant qu'il a 1 cycle de latence entre chaque, ça va prendre 3 cycles de 1 est complète jusqu'à ce que le résultat de 4 est prêt et nous pouvons appeler la fonction.
Mais si nous réorganiser et de les évaluer dans l'ordre 1, 3, 2, 4, nous pouvons le faire en 2 cycles. 1 et 3 peuvent être démarrés dans le même cycle (ou même fusionnées en une seule instruction, puisque c'est la même expression), et dans la suite, 2 et 4 peuvent être évalués.
Tous les modernes, le PROCESSEUR peut exécuter 3-4 instructions par cycle, et un bon compilateur doit essayer de les exploiter.