J'avais compris que "déclaration" ou "définition" avaient peu à voir avec "création".
Les variables sont "créées" à la compilation dans le sens que l'espace est prévu et la gestion est générée à ce moment.
Par contre, le traitement des variables globales est probablement différent des variables locales à une fonction. La gestion des variables d'une fonction est plus complexe.
Je suppose que leurs adresses doivent être obtenues sur la pile alors que ça ne devrait pas être nécessaire pour les variables globales.
Le Tout est souvent plus grand que la somme de ses parties.
(erreur ligne 5, deux-points au lieu de point virgule)
Euh, si on s'intéresse aux performance du code généré par un compilateur (*) et qu'on veut en tirer des conclusions, on le fait en activant une/des options d'optimisation.
Il y a plusieurs critères, comme obtenir le code le plus court, ou le code le plus rapide. Ce n'est pas la même chose, et c'est même contradictoire (dépliage de boucles...), donc il y a un choix à faire sur les objectifs.
Sinon, avec les options par défaut le compilateur fait du code de goret sans tenter d'optimiser, parce que les optimisations sont coûteuses. C'est utile aussi quand on recompile un programme de dizaines de milliers de lignes pour sa mise au point.
Si on regarde le code compilé avec option -Os, il y a pas photo
Deux instructions de plus, parce qu'il faut mettre à jour la variable globale (au cas où on aurait des threads qui veulent y toucher aussi, allez savoir).
- Edité par michelbillaud 20 janvier 2020 à 12:34:15
Le Tout est souvent plus grand que la somme de ses parties.