« Structures de données/Pointeurs » : différence entre les versions

Contenu supprimé Contenu ajouté
retour sur la gestion des variables en mémoire, mémoire dynamique. schéma manquants
(Aucune différence)

Version du 27 novembre 2006 à 13:45

Retour sur la gestion des variables en mémoire

Pour aborder la notion de pointeur, il convient de revenir sur le notion de variable. Nous devons regarder de plus près ce qu'il se passe au niveau de la machine quand on déclare un variable ou qu'on l'assigne.

Faisons donc un retour sur l'architecture des ordinateurs. Les variables sont stockées dans une mémoire statique : on peut représenter cette mémoire par un tableau. Chaque ligne de ce tableau est une "case" mémoire c'est à dire une zone ou l'on peut stocker une donnée atomique (par exemple un entier). Dans la machine, toutes ces cases sont numérotées sur n bits (dépend de l'architecture de la machine en question). Ce numéro, attribué de façon unique à chaque case identifie la case : c'est l'adresse mémoire de la case.

Pour la suite nous utiliserons une machine 8 bits, bien que les machines PC grand public (x86) sont aujourd'hui (2006) des machines 32 bits, 64 bits pour les plus récentes.

Nous avons donc une mémoire dont l'adresse de chaque octect est codée sur un octect, ce qui nous fait 256 cases numérotées de 0 à 255, 00 à FF en hexadécimal (qu'on utilisera pour numéroter les cases mémoires)

schéma de la mémoire

Que se passe-t-il quand on exécute un programme P ? Et bien le système d'exploitation qui exécute P va allouer au programme autant de place que nécessaire dans cette mémoire statique pour que toutes les variables du lexique du P puisse y être stockées.

Exemple avec le programme suivant : il s'agit de l'algorithme inversion de deux variables étudié en algorithmique impérative) :

Algorithme inversion_calcul
Variables
  a : entier
  b : entier
...

Voici à quoi ressemble notre mémoire statique si notre machine code les entiers sur un octet (une case mémoire)

schéma de la mémoire avec deux cases a et b réservées

À chaque assignation d'une variable, on affecte le contenu de la case mémoire dont l'adresse est contenu dans la variable. L'identifiant de la variable est en fait une abstraction, derrrière l'identifiant d'une variable se cache l'adresse mémoire de son contenu.

La mémoire dynamique

En plus d'allouer à chaque programme une mémoire statique, le système d'exploitation alloue au programme P une mémoire dynamique. Dans notre exemple avec l'inversion de deux variables notre programme n'utilise que la mémoire statique. Nous avons donc omis de représenter sur nos schémas cette mémoire.

La mémoire dynamique a les même caractéristiques que le mémoire statique telle que décrite précedemment. Les cases sont numérotées (nous supposerons là encore sur 8 bits : de 00 à FF)

Nous allons apprendre comment utiliser cette mémoire dynamique. Et ce, avec cet outil que sont les pointeurs.

Les pointeurs

Le pointeur est un nouveau type au même titres que les entiers, les caractères, chaînes de caractères, booléens et autres abordés en algorithmique impérative.