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

Méthode et Outils pour la Programmation

Présentations similaires


Présentation au sujet: "Méthode et Outils pour la Programmation"— Transcription de la présentation:

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.


Télécharger ppt "Méthode et Outils pour la Programmation"

Présentations similaires


Annonces Google