18Fermer20
squalylLe 07/08/2007 à 10:11
ça dépend des optimisations/compilateurs/etc

java est basé sur une pile oui.

chaque méthode a besoin d'un stack frame (qui n'a pas besoin d'être contigu au précédent), qui contient N variables locales et M places de pile.
pour faire un CALL on copie les dernieres places de la pile courante dans les variables locales d'un nouveau stack frame, puis on exécute le bytecode de la nouvelle méthode dans le frame qu'on vient de créer (je parle sans JIT et tout le bordel)

ce qui fait que le code de génération de codes d'expressions du compilo est hyper simple (parcours d'arbre en profondeur) et c'est facile de générer du code qui commence toujours par la sous-expression de gauche, et qui garantit l'ordre d'évaluation G-D

par contre en C, pour gcc je sais pas , mais en cours on a appris un algo en 2 passes et N registres, et on se démerde pour calculer d'abord la branche qui demande le moins de registres. Selon les optimisations l'ordre d'eval changera.