Allocation dynamique de la mémoire : principe

Allocation dynamique

Nous avons vu, dans la section consacrée aux tableaux, comment déclarer une séquence d'éléments d'un type unique. Par exemple, la déclaration suivante définit un tableau unidimensionnel de 100 éléments de type int :

  int tab[100] ;

Cette déclaration a l'intérêt de réserver un espace en mémoire pour 100 entiers, associé à une seule variable, au lieu de déclarer 100 variables différentes. Cependant, nous trouverons des situations où ce mécanisme s'avère trop rigide. Par exemple, si le nombre d'éléments à utiliser dans le programme n'est pas connu à l'avance (avant l'exécution du programme), 2 solutions existent :

  • Déclarer un très gros tableau, par exemple de 1 000 000 d'entiers,

  • Faire de l'allocation dynamique.

La première solution, en plus d'être inélégante, est inefficace. En effet, si dans la majorité des exécutions, seules quelques dizaines de valeurs sont traitées, alors cette réservation inclut une grande partie inutile, aboutissant à un gaspillage de mémoire. À l'inverse, si l'ensemble des données à traiter comprend plus d'un million d'entiers, le programme devient inopérant. Enfin, l'évolution technologique dans les ordinateurs peut, d'ici 5 ou 10 ans, faire de ce dernier cas un cas courant. Donc fixer une limite peut rendre le logiciel inutilisable par la suite.

La 2e solution est recommandée. Il s'agit alors de déterminer à l'exécution combien d'éléments sont nécessaires pour le tableau, de réserver l'espace nécessaire auprès du système d'exploitation, puis d'utiliser cet espace.