Mémoire et variables#
Un ordinateur traite de l'information.
Il faut pouvoir la stocker: la mémoire
Il faut pouvoir y accéder: les variables
Mémoire#
https://fr.wikipedia.org/wiki/Mémoire_(informatique)
Modèle de mémoire basique#
Une suite contiguë de
0et de1Les bits (bit), groupés par paquets de huit appelés octets (byte)
Pour 1 Go, à raison de un bit par mm, cela ferait 8590 km Plus que Paris-Pékin!
Le processeur y accède par adresse
Variables#
Une variable est un espace de stockage nommé où le programme peut mémoriser une donnée; elle possède quatre propriétés:
Un nom (ou identificateur (identifier)): Il est choisi par le programmeur
Une adresse (address): Où est stockée la variable dans la mémoire
Un type qui spécifie:
La structure de donnée: comment la valeur est représentée en mémoire En particulier combien d'octets sont occupés par la variable
La sémantique des opérations
Une valeur: Elle peut changer en cours d'exécution du programme
Règles de formation des identificateurs#
Les noms des variables (ainsi que les noms des programmes, constantes, types, procédures et fonctions) sont appelés des identificateurs.
Syntaxe: règles de formation des identificateurs
suite de lettres (minuscules
'a'...'z'ou majuscules'A'...'Z'), de chiffres ('0'...'9') et de caractères de soulignement ('_')premier caractère devant être une lettre
longueur bornée
Exemples et contre-exemples d'identificateurs :
c14_T0est un identificateur14c_T0n'est pas un identificateurx*yn'est pas un identificateur
Formation des identificateurs : bonnes pratiques#
Donnez des noms signifiants aux variables
Dans le cas de plusieurs mots, par convention dans le cadre de ce cours on mettra le premier mot en minuscule et les suivants avec une majuscule:
maVariableAutre convention possible:
ma_variable
Mauvais noms :
truc,toto,temp,nombreBons noms courts:
i,j,k,x,y,zt, notamment pour coller aux notations usuelles en mathématiques, physique, ...Bons noms longs:
notes,moyenneNotes,estNegatif
Modèle mémoire affiné : la pile#
Rappel : Syntaxe : déclaration des variables
type nomvariable;
type nomvariable1, nomvariable2, ...;
🤔 Quelle sémantique?
Comment est choisie l'adresse?
Comment s'assurer qu'elle n'est pas déjà utilisée?
Comment libérer la mémoire quand on n'en a plus besoin?
La pile
Toutes les variables déclarées sont regroupées dans une portion de la mémoire appelée la pile
On représente la pile sous la forme d'un tableau indiquant le type, le nom et la valeur des variables actuellement déclarées.
Voici par exemple une représentation de la pile d'un programme avec
trois variables i, l, et d :
┌──────────┬─────┐
│ int i │ 4 │
│ long l │ 4 │
│ double d │ 1.5 │
└──────────┴─────┘
Pile
Notes
Seuls les valeurs sont stockées dans la mémoire
Les indications de nom et de type sont des indications pour le lecteur
L'espace réservé pour une variable (nombre d'octets, déterminé par son type) est implicite dans cette représentation.
Souvent, lorsque l'on analyse le comportement d'un programme, on ne
s'intéresse qu'aux dernières variables déclarées. On utilise alors
... pour représenter les autres variables dont on ne souhaite pas
donner les détails :
┌──────────┬─────┐
│ int i │ 4 │
│ long l │ 4 │
│ ... │ ... │
└──────────┴─────┘
Pile
Sémantique : déclaration de variable
Lorsqu'une nouvelle variable est déclarée :
Un espace mémoire de la taille requise est alloué au sommet de la pile
Le contenu initial de cet espace est non spécifié
┌──────────┬─────┐
│ ... │ │
└──────────┴─────┘
Pile
┌──────────┬─────┐
│ int v │ ? │
│ ... │ │
└──────────┴─────┘
Pile
À faire
Portée
Sortie du bloc
Initialisation des variables#
Quelle est la valeur de ces variables après leur déclaration?
double d;
long l;
int i;
l
0
type: long
d
0.0000000
type: double
i
0
type: int
Certains langages ou compilateurs garantissent que les variables sont initialisées à une valeur par défaut.
En
C++, pas forcément!Typiquement, la valeur de la variable correspond à l'état de la mémoire au moment de sa déclaration
Bonne pratique: systématiquement initialiser les variables au moment de leur déclaration:
int i = 0;
long l = 1024;
double d = 3.14159;