Programmer en langage C
196
© Éditions Eyrolles
Leur gestion, qui ne saurait se faire à la manière d’une pile, est indépendante de celle des
données automatiques. Plus précisément, elle se fait généralement dans ce que l’on nomme un
tas (heap en anglais) dans lequel on cherche à allouer ou à libérer de l’espace en fonction des
besoins.
En définitive, les données d’un programme se répartissent en trois catégories : statiques, automatiques et dynamiques. Les données statiques sont définies dès la compilation ; la gestion
des données automatiques reste transparente au programmeur et seules les données dynamiques
sont véritablement créées sur son initiative.
D’une manière générale, l’emploi de données statiques présente certains défauts intrinsèques.
Citons deux exemples :
●
Les données statiques ne permettent pas de définir des tableaux de dimensions variables,
c’est-à-dire dont les dimensions peuvent être fixées lors de l’exécution et non dès la compilation. Il est alors nécessaire d’en fixer arbitrairement une taille limite, ce qui conduit
généralement à une mauvaise utilisation de l’ensemble de la mémoire.
●
La gestion statique ne se prête pas aisément à la mise en œuvre de listes chaînées, d’arbres
binaires,... objets dont ni la structure ni l’ampleur ne sont généralement connues lors de la
compilation du programme.
Les données dynamiques vont permettre de pallier ces défauts en donnant au programmeur
l’opportunité de s’allouer et de libérer de la mémoire dans le « tas », au fur et à mesure de ses
besoins.
1 Les outils de base de la gestion dynamique : malloc et free
Commençons par étudier les deux fonctions les plus classiques de gestion dynamique de la
mémoire, à savoir malloc et free.
1.1 La fonction malloc
a) Premier exemple
Considérez ces instructions :
#include
.....
char * adr ;
.....
adr = malloc (50) ;
.....
for (i=0 ; i<50 ; i++) *(adr+i) = 'x' ;
Delannoy Livre.book Page 196 Mercredi, 6. mai 2009 4:26 16
Précédent

- 209/281

Suivant