@dinobogan : merci pour le test. En effet, si le second code (celui de mith06) donnait aussi un résultat erronné cela serait très problématique.
Envoyé par
dinobogan
Si quelqu'un a une explication sur ce comportement, je suis preneur car la doc officielle IBM ne dit quasiment rien sur les effets concrets des options de compilations pour l'optimisation du code.
Mécanique interne du compilateur, et c’est en effet rarement documenté (voir impossible à documenter).
L’initialisation des membres à 0 de la structure doit influer sur les analyses de flots et/ou sur les optimisations possibles par le compilateurs.
Clairement, les deux codes sont « faux » car il y a la ligne :
premier * p = (premier*)((void*)(& s));
Car cela viole la règle de l’aliasing (comme je l’ai dit dans un message précédent), et c’est un truc très utilisé par les compilateurs pour optimiser justement.
Un très bon article sur cette règle du strict aliasing.
Partager