« Programmation/Variables » : différence entre les versions
Contenu supprimé Contenu ajouté
lourdeur |
|||
Ligne 15 :
== Niveau système ==
Au niveau système , une variable occupe un certain nombre de bits <ref name="mots">Un bit peut valoir 0 ou 1, et correspond à un état électrique (niveau haut / niveau bas, circuit ouvert / circuit fermé). Les bits sont généralement regroupés en mots, on parle d'octets lorsqu'un mot regroupe 8 bits.</ref> en mémoire.
Elle occupe donc une zone dont l'adresse correspond à celui du premier mot stockant la valeur qu'elle contient.
Exemple avec une variable de type entier sur 32 bits (soit 4 octets) sur une machine dont le processeur stocke d'abord l'octet de poids faible :
*<tt>NOMBRE: ENTIER = 12345</tt>
*La valeur correspondante en hexadécimal sur 32 bits est : <tt>00003039''h''</tt>
*En supposant que la variable occupe les emplacements (les adresses) 100, 101, 102 et 103, ceux-ci contenant chacun 1 octet, contiennent les valeurs suivantes :
{{entête tableau charte}}
! Adresse
! Contenu
|-----
| <tt>100</tt>
| <tt>39''h''</tt>
|-{{ligne grise}}
| <tt>101</tt>
| <tt>30''h''</tt>
|-----
| <tt>102</tt>
| <tt>00''h''</tt>
|-{{ligne grise}}
| <tt>103</tt>
| <tt>00''h''</tt>
|}
L'emplacement de cette variable est déterminée :
*A la compilation du programme, en général, relativement au début de la section de données allouée par le système, c'est à dire que le compilateur détermine un décalage (offset),
*A l'exécution de l'application, lorsque le système alloue la section de données correspondante (en lui attribuant une addresse absolue en mémoire).
L'utilisation conjointe de ces deux informations donne l'adresse absolue de la variable en mémoire :
adresse variable = adresse absolue de la zone de données + décalage
Cette adresse est utilisée lors des opérations de lecture et d'écriture.
La machine n'a pas besoin d'enregistrer le [[Programmation/Type|type]] de la variable. Le type n'est utilisé que pour déterminer comment la variable peut être manipulée par les instructions (lecture, écriture, calculs, nombre de bits occupés en mémoire).
Cependant certains langages interprétés ou des langages de programmation permettant la réflexion enregistre le type comme information supplémentaire pour d'autres opérations (vérification, duplication, instanciation, ...).
Lors de l'exécution de l'application, la zone de données n'est pas toujours initialisée à zéro. En effet, cet emplacement a pu être allouée antérieurement à une autre application, et contient donc des valeurs utilisées par celle-ci. Cependant, pour des raisons évidentes de sécurité<ref name="securité">De nombreux programmes espions ont utilisé cette fonctionnalité pour récupérer des informations sensibles notamment des mots de passe.</ref>, les systèmes modernes initialisent à zéro les zones allouées aux applications.
En [[langage machine]], accéder à une variable correspond à écrire l'adresse de la variable sur le bus d'adresse, et lire ou écrire sur le bus de données la valeur correspondante.
La valeur est toujours binaire à l'intérieur de la machine : stockage, opérations. La conversion en d'autres bases (octal, décimal, hexadécimal) n'est faites que lors de la présentation de la valeur à l'utilisateur, ou lors de sa saisie par l'utilisateur.
Les variables sont utilisées pour :
* stocker des valeurs, des résultats dans le temps, pour les utiliser ultérieurement,
* transmettre des valeurs à des fonctions,
* stocker des résultats intermédiaires dans une séquence de calculs, notamment lorsque ce résultat est utilisé plusieurs fois dans une expression.
== Notes ==
<references/>
|