La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Gestion dynamique de la mémoire Licence informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Claude Daval-Frérot.

Présentations similaires


Présentation au sujet: "Gestion dynamique de la mémoire Licence informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Claude Daval-Frérot."— Transcription de la présentation:

1

2 Gestion dynamique de la mémoire Licence informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Claude Daval-Frérot

3 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

4 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)

5 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

6 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

7 MÉMOIRE : LE MODÈLE IdentificateurAdresseContenu STATIQUESTATIQUE TASTAS

8 Mémoire statique (exemple) int k; k 0100:0002? STATIQUESTATIQUE TASTAS IdentificateurAdresseContenu 2 k=2; char c[3]; c[0] 0100:0003? c[1] 0100:0004? c[2] 0100:0005? char lettre=u; lettre 0100:0006u c[0]=d; d c[1]= lettre; u c[2]= \0; \0

9 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.

10 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++

11 GESTION DYNAMIQUE 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) ladresse d un emplacement mémoire généralement issu du TAS

12 GESTION DYNAMIQUE - EXEMPLE int* ptr; Ptr=new int; ptr0100:0002?0200:0004?0200:0004 L instruction new retourne une adresse du TAS. Cette adresse(0200:0004) est affectée à ptr. Ptr est une variable (statique) de type pointeur sur int. Elle est non définie Identif.AdresseContenu

13 GESTION DYNAMIQUE - EXEMPLE ptr0100:0002? 0200:0004? 0200:0004 Identif.AdresseContenu int* ptr; Ptr=new int; *ptr est l identificateur de la valeur pointée par ptr. *ptr *ptr = 4; 4 Nous avons alloué un entier puis nous lui avons affecté la valeur 4

14 GESTION DYNAMIQUE - EXEMPLE ptr0100:0002? 0200:0004? 0200:0004 Identif.AdresseContenu *ptr4 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. ?

15 AFFECTATION DE POINTEURS int* ptr; Ptr=new int; *ptr = 4; ptr0100:0002? 0200:0004? 0200:0004 Identif.AdresseContenu *ptr4 int * ptr1; ptr1=ptr; ptr10100:0003?0200:0004 Les pointeurs ptr et ptr1 pointent tous les deux sur le même entier égal à 4.

16 CONSTANTE NULL int* ptr; Ptr = NULL; ptr0100:0002? Identif.AdresseContenu NULL Quand un pointeur a pour valeur NULL, ce pointeur pointe sur aucun emplacement mémoire.

17 DONNER UNE VALEUR À UN POINTEUR Il existe trois façons de donner une valeur à un pointeur Instruction new Affectation dun autre pointeur Affectation de la valeur NULL, ou de la valeur d une adresse

18 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;

19 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.


Télécharger ppt "Gestion dynamique de la mémoire Licence informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Claude Daval-Frérot."

Présentations similaires


Annonces Google