La durée de vie d'une variable s'oppose à sa portée (l'endroit où elle peut être utilisée) : les termes « global » et « local » font référence à la portée, et non à la durée de vie, mais la portée implique souvent la durée de vie. Dans de nombreux langages, les variables globales sont toujours statiques, mais dans certains, elles sont dynamiques , tandis que les variables locales sont généralement automatiques, mais peuvent être statiques.
En général,L'allocation de mémoire statique est l'allocation de mémoire aumoment de la compilation, avant que le programme associé ne soit exécuté, contrairement àl'allocation de mémoire dynamiqueouà l'allocation de mémoire automatiqueoù la mémoire est allouée en fonction des besoins aumoment de l'.
ALGOL 60 (1960), où elles sont connues sous le nom de variables propres :Une déclaration peut être marquée avec le déclarateur supplémentaire `own`. Cela a l'effet suivant : lors d'une nouvelle entrée dans le bloc, les valeurs des variables déclarées avec `own` resteront inchangées par rapport à leurs valeurs lors de la dernière sortie, tandis que les valeurs des variables déclarées sans ` own` seront indéfinies.
— Rapport révisé sur ALGOL 60, section « 5. Déclarations », p. 14
Cette définition diffère subtilement de celle d'une variable statique : elle spécifie uniquement le comportement, et donc la durée de vie, et non le stockage : une variable propre peut être allouée lors du premier appel d'une fonction, par exemple, plutôt qu'au moment du chargement du programme.
L'utilisation du terme « static » pour désigner ces variables remonte au moins à BCPL (1966) et a été popularisée par le langage de programmation C , fortement influencé par BCPL. La définition de BCPL est la suivante :
staticmot-clé est utilisé en C et dans les langages apparentés, aussi bien pour les variables statiques que pour d'autres concepts.Adressage
Portée
Exemple
Exemple de variable locale statique en C :
Programmation orientée objet
Les constantes d'objet connues à la compilation, telles que les chaînes de caractères , sont généralement allouées statiquement. En programmation orientée objet, les tables de méthodes virtuelles des classes sont également généralement allouées statiquement. Une valeur définie statiquement peut aussi être globale, garantissant ainsi l'utilisation de la même valeur immuable tout au long de l'exécution, pour plus de cohérence.