Gestion dynamique de la mémoire
Download
1 / 18

Gestion dynamique de la mémoire - PowerPoint PPT Presentation


  • 168 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' Gestion dynamique de la mémoire' - badu


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

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

  • Trace en mémoire sur des exemples

  • Opérations sur les pointeur


La m moire
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)


La memoire

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)


Modele simplifie
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


M moire le mod le

S

T

A

T

I

Q

U

E

Identificateur

Adresse

Contenu

T

AS

MÉMOIRE : LE MODÈLE


M moire statique exemple

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


Gestion dynamique
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.


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


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


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.


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


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;


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.


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;


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


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


Bonne gestion de la m moire
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.


ad