Il n'y a pas de différence pour l'espace, ils prennent la même quantité.
Mais il y a une différence de vitesse: statique est plus rapide.
Bien sûr, l'accès mémoire à la variable est global et statique. Mais le compilateur peut optimiser quand vous avez statique. Quand il compile un module, il sait qu'aucun appel de fonction à une fonction en dehors du module ne peut changer une variable statique. Donc, il sait exactement ce qui se passe et peut, par exemple, Gardez-le dans un registre sur les appels de fonction. Quand il est global et que vous appelez une fonction d'un module différent, le compilateur ne peut pas savoir ce qu'il fait. Il doit donc supposer que la fonction accède à la variable et la modifie, ce qui entraîne un stockage et un rechargement. Avec gcc vous pouvez passer toutes les sources .c
en même temps, ainsi il peut également voir ce qui se passe dans les appels de fonction à des fonctions de différents modules.
Avec gcc vous pouvez passer toutes les sources .c
en même temps. Pour le faire fonctionner, vous devez passer à côté de tous les fichiers .c
à la fois -combine
et -fwhole-program
. Le -fwhole-program
rend toutes les variables globales statiques (pas le module statique mais l'unité de compilation statique, c'est-à-dire tous les fichiers .c
donnés ensemble). Le -combine
effectue l'analyse intermodule.
En regardant l'ensemble produit par le compilateur serait également révélateur. –