« Programmation/Variables » : différence entre les versions

Contenu supprimé Contenu ajouté
Tavernier (discussion | contributions)
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.
{{sujet à caution}}
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 :
Au niveau système , une variable est une adresse pointant vers un emplacement situé sur un support composé d'un ensemble homogène de commuteurs dont la configuration peut être interprétée par le langage binaire intégré dans la machine et modifiée par le biais des instructions transmises aux outils de lecture et d'écriture intégrés dans le support de stoquage.
*<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 :
En langage machine, créer une variable consiste à choisir un emplacement au sein du support de stoquage, d'y inscrire son [[Programmation/Type|type]], c'est à dire sa taille, c'est à dire le nombre de commuteurs réservés à la variable dont on vient de demander la création, au sein des commuteurs situés immédiatement après le premier commuteur dont la configuration de commuteurs allumés ou éteints (0010110...) correspond à un nombre selon la [[Programmation/Base|base]] d'origine du système. Puis de commuter tous les bits à la valeur 0<!-- corrigez-moi si mon intuition me trompe -->
*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 :
En [[langage machine]], accéder à une variable correspond à faire communiquer au système les états constatés des numéros binaires, ou bits – terme qu'on utilisera dorénavant pour désigner les commuteurs – parcourus par l'outil de lecture du support de stoquage le long de l'intervale dont la borne fermante marque la fin de la variable et dont l'adresse est située à une distance constante par rapport à l'intervale ouvrant, la taille de l'intervalle correspondant au [[Programmation/Type|type]] de la variable. La suite de numéros binaires enregistrée par le lecteur est ensuite communiquée au système qui se chargera de la convertir en une valeur exploitable dans une base (octale, décimale ou hexadécimale pour les plus connues) correspondant éventuellement à une constante alphanumérique selon l'[[Programmation/Encodage|Encodage]] chargé de l'interpréter.
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).
L'interet des variables est ququ'il est possible de faire correspondre à un langage exploitable par l'homme en transformant la suite de chiffres binaires en des nombres décimaux qui peuvent alors devenir des symboles facilement manipulables par des procédures mathématiques.
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/>