Non, la norme ne fait aucune exigence que les détails de mise en œuvre doivent être les mêmes. 1.9/1:
Les descriptions sémantiques dans la présente Norme internationale définissent une machine abstraite non déterministes paramétrés . Cette norme internationale ne place aucune exigence sur la structure des implémentations conformes . En particulier, ils n'ont pas besoin de copier ou d'émuler la structure de la machine abstraite. Au contraire, les implémentations conformes sont requises pour émuler (uniquement) le comportement observable de la machine abstraite comme expliqué ci-dessous.
Ainsi, seul le "comportement observable" doit être le même. comportement Observable est défini dans 1,9/6:
Le comportement observable de la machine abstraite est sa séquence de lit et écrit les données volatiles et appels à la bibliothèque de fonctions d'E/S.
Les instructions exactes utilisées pour y parvenir ne sont pas « comportement observable », et dans votre exemple puisque le tableau n'est pas volatile
, l'ordre de ne pas observable est écrit non plus. En fait, à moins que vous n'utilisiez le tableau plus tard, les écritures elles-mêmes ne sont pas observables. Il serait légal que l'optimiseur de l'implémentation supprime avec succès l'intégralité de l'extrait de code dans un cas mais pas dans l'autre, bien qu'il soit peut-être surprenant qu'il ne puisse en gérer qu'un seul.
Très probablement, sur tout vrai compilateur, ils doivent être les mêmes. – Puppy
J'ai toujours pensé que oui, même si je ne peux pas citer le ref standard maintenant. Pourquoi es-tu dans le doute? – Vlad
Pourquoi avez-vous besoin de savoir? Ou avez-vous un exemple où cela aurait de l'importance? –