You are on page 1of 4

Murielle TORREGROSSA

GESTION DYNAMIQUE DE LA
MEMOIRE

Gnralits
Lors de la dfinition d'un tableau, on est oblig
de fixer (souvent arbitrairement) la
compilation le nombre d'lments de ce
tableau, ce qui peut conduire une mauvaise
utilisation de l'ensemble de la mmoire.

La gestion dynamique de la mmoire permet


au programmeur de "s'allouer" et de "librer"
de la mmoire au fur et mesure de ses
besoins.

IUT R. Schuman Strasbourg


R. Stutzman, M. Torregrossa
2

Architecture des ordinateurs 1


Murielle TORREGROSSA

Primitive d'allocation de mmoire: malloc

Prototype :
#include <stdlib.h>
void *malloc( int nb ) ;

La primitive malloc rserve en mmoire une zone de


nb octets et retourne un pointeur ggnrique (void *)
gal l'adresse du premier octet de la zone alloue.
Cette adresse retourne par malloc peut tre affecte
n'importe quelle variable de type pointeur.
pointeur.
Lorsque l'allocation en mmoire ne peut pas se faire
malloc retourne un pointeur nul ( == 0).

IUT R. Schuman Strasbourg


R. Stutzman, M. Torregrossa
3

Exemple 1 :
#include <stdlib.h>
char *ptr ;
int i, taille ;
/*allocation d'une zone de "taille"
ptr = malloc(taille) ; octets utilise pour stocker un
tableau de "taille" char */
for(i=0 ; i<taille ; i++)
*( ptr + i ) = 'x ;

On peut aussi crire :


for(i=0 ; i<taille ; i++)
ptr[i] = 'x ;

IUT R. Schuman Strasbourg


R. Stutzman, M. Torregrossa
4

Architecture des ordinateurs 2


Murielle TORREGROSSA

Exemple 2 :
#include <stdlib.h>

int *ptr ;
int i , nb ; /* allocation d'une zone
de k octets, k gal "nb"
multipli par la taille
ptr = malloc(nb * sizeof(int)); d'un objet int.
for(i=0 ; i<nb ; i++ ) La zone est utilise pour
stocker un tableau de "nb"
*(ptr+i)=0; entiers */

On peut aussi crire :


for(i=0 ; i<nb ; i++)
ptr[i]=0;
IUT R. Schuman Strasbourg
R. Stutzman, M. Torregrossa
5

Primitive de libration de la mmoire : free

Prototype :
#include <stdlib.h>
void free (void *ptr) ;

La primitive free libre une zone mmoire


prcdemment alloue par malloc.
L'argument de la primitive free est l'adresse qui
avait t retourne par la primitive malloc
lors de l'allocation de la mmoire.

IUT R. Schuman Strasbourg


R. Stutzman, M. Torregrossa
6

Architecture des ordinateurs 3


Murielle TORREGROSSA

Primitive de libration de la mmoire : free

Remarque:

Il est important
z de tester le code retour demalloc afin de
s'assurer que l'allocation a bien t faite :
code retour != NULL
z de librer les zones mmoires prcdemment
alloues et dont on n'a plus besoin, afin
d'viter de saturer la mmoire .

IUT R. Schuman Strasbourg


R. Stutzman, M. Torregrossa
7

Architecture des ordinateurs 4

You might also like