1 / 18

Gestion dynamique de la mémoire

Gestion dynamique de la mémoire. Méthode et Outils pour la Programmation Françoise Greffier Claude Daval-Frerot. Notion de pointeur. Application en langage C++. Gestion dynamique de la mémoire. Un modèle simplifié de la mémoire Gestion dynamique : intérêt Notion de pointeur

badu
Download Presentation

Gestion dynamique de la mémoire

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Gestion dynamique de la mémoire Méthode et Outils pour la Programmation Françoise Greffier Claude Daval-Frerot Notion de pointeur Application en langage C++

  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. Adresse Contenu LA MEMOIRE DESCRIPTION PHYSIQUE : Chaque emplacement mémoire est décrit par - Une adresse pour localiser son emplacement, - Un contenu (appelé une donnée)

  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. S T A T I Q U E Identificateur Adresse Contenu T AS MÉMOIRE : LE MODÈLE

  7. S T A T I Q U E Identificateur Adresse Contenu ‘\0’ ‘u’ ‘d’ 2 c[0] 0100:0003 ? c[1] 0100:0004 ? k=2; c[2] 0100:0005 ? T AS Mémoire statique (exemple) k 0100:0002 ? int k; lettre 0100: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 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. Identif. Adresse Contenu Ptr est une variable (statique) de type pointeur sur int. Elle est non définie 0200:0004 L ’instruction new retourne une adresse du TAS. 0200:0004 ? GESTION DYNAMIQUE - EXEMPLE int* ptr; ptr 0100:0002 ? Ptr=new int; Cette adresse(0200:0004) est affectée à ptr.

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

  13. Identif. Adresse Contenu ? ptr 0100:0002 ? 0200:0004 int* ptr; Ptr=new int; *ptr = 4; 0200:0004 ? *ptr 4 On n ’a plus besoin de l ’entier alloué. On remet la mémoire précédemment allouée, à disposition du tas. GESTION DYNAMIQUE - EXEMPLE delete ptr;

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

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

  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 libération • de cet emplacement (delete). • Attribuer des noms de variables explicites : • ptr pour les pointeurs.

More Related