Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Méthode et Outils pour la Programmation
Gestion dynamique de la mémoire Licence informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Claude Daval-Frérot
2
Gestion dynamique de la mémoire
Un modèle simplifié de la mémoire Gestion dynamique : intérêt Notion de pointeur Trace en mémoire sur des exemples Opérations sur les pointeur
3
LA MÉMOIRE EXECUTION LOGIQUE D ’UN PROGRAMME :
On distingue trois parties : Code Pile Données implantées - en mémoire statique ou - en mémoire dynamique (le TAS)
4
LA MEMOIRE DESCRIPTION PHYSIQUE :
Chaque emplacement mémoire est décrit par - Une adresse pour localiser son emplacement, - Un contenu (appelé une donnée) Adresse Contenu
5
MODELE SIMPLIFIE On simplifie les points suivants :
Différents types de codage des données Le nombre d ’octets des données La localisation et les limites du TAS Les mécanismes de segmentation de la mémoire On considère la mémoire sous cette forme : Les données sont implantées en mémoire dans deux zones: - une zone mémoire statique - une zone mémoire dynamique (appelée TAS) Un emplacement mémoire est défini par : - une adresse - un contenu (donnée) - un identificateur
6
MÉMOIRE : LE MODÈLE S T A I Q U E Identificateur Adresse Contenu T A S
7
Mémoire statique (exemple)
A S Identificateur Adresse Contenu 2 k :0002 ? ‘d’ c[0] :0003 ? c[1] :0004 ? c[2] :0005 ? int k; ‘u’ k=2; ‘\0’ lettre :0006 ‘u’ char c[3]; char lettre=‘u‘; c[0]=‘d’; c[1]= lettre; c[2]= ‘\0’;
8
GESTION DYNAMIQUE INTÉRÊT :
Disposer d ’emplacements en mémoire, utiles à une application, au fur et à mesure de l ’exécution d ’une application. Ainsi : plus besoin d ’anticiper sur la taille maximum d ’une collection. Exemple : char c [3]; //taille maximum de la chaîne = 2 En outre, le TAS est un espace mémoire plus grand que la zone statique.
9
GESTION DYNAMIQUE Gestion dynamique (au fur et à mesure …) :
Deux instructions sont utiles: une, pour réserver (ou allouer) un emplacement mémoire dans le TAS une, pour libérer (désallouer) la mémoire : remettre la mémoire précédemment allouée à disposition du TAS new en C/C++ delete en C/C++
10
GESTION DYNAMIQUE Un pointeur est une variable
Pour pouvoir effectuer les deux opérations : allouer et libérer un emplacement mémoire dans le TAS, il faut manipuler et donc désigner les emplacements mémoire. Or, à chaque emplacement mémoire est associé une adresse. On va donc manipuler des adresses. Un pointeur est une variable qui a pour valeur (contenu) l’adresse d ’un emplacement mémoire généralement issu du TAS
11
GESTION DYNAMIQUE - EXEMPLE
int* ptr; Identif. Adresse Contenu Ptr est une variable (statique) de type pointeur sur int. Elle est non définie 0200:0004 ? 0200:0004 ptr 0100:0002 ? Ptr=new int; L ’instruction new retourne une adresse du TAS. Cette adresse(0200:0004) est affectée à ptr.
12
GESTION DYNAMIQUE - EXEMPLE
ptr 0100:0002 ? 0200:0004 ? 0200:0004 Identif. Adresse Contenu int* ptr; Ptr=new int; *ptr est l ’identificateur de la valeur pointée par ptr. *ptr 4 *ptr = 4; Nous avons alloué un entier puis nous lui avons affecté la valeur 4
13
GESTION DYNAMIQUE - EXEMPLE
ptr 0100:0002 ? 0200:0004 ? 0200:0004 Identif. Adresse Contenu *ptr 4 ? int* ptr; Ptr=new int; *ptr = 4; delete ptr; On n ’a plus besoin de l ’entier alloué. On remet la mémoire précédemment allouée, à disposition du tas.
14
AFFECTATION DE POINTEURS
ptr 0100:0002 ? 0200:0004 ? 0200:0004 Identif. Adresse Contenu *ptr 4 int* ptr; Ptr=new int; *ptr = 4; ptr1 0100:0003 ?0200:0004 int * ptr1; ptr1=ptr; Les pointeurs ptr et ptr1 pointent tous les deux sur le même entier égal à 4.
15
CONSTANTE NULL Identif. Adresse Contenu ptr 0100:0002 ? NULL int* ptr;
Quand un pointeur a pour valeur NULL, ce pointeur pointe sur aucun emplacement mémoire.
16
DONNER UNE VALEUR À UN POINTEUR
Il existe trois façons de donner une valeur à un pointeur Instruction new Affectation d’un autre pointeur Affectation de la valeur NULL, ou de la valeur d ’une adresse
17
NOTATIONS On a la possibilité de désigner
Ptr : variable de type pointeur *ptr : valeur pointée par ptr &ptr : l ’adresse de la variable ptr int k; k=2; int * ptr; ptr=&k; c[2]= ‘\0’;
18
Bonne gestion de la mémoire
A chaque réservation d ’un emplacement mémoire (new) doit correspondre une et une seule libération de cet emplacement (delete) Attribuer des noms de variables explicites : ptr pour les pointeurs.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.