|
|
Allocation
de mémoire
malloc(..) free(..) |
|
Réservation
statique - réservation dynamique
|
|
Il arrive souvent que l'on ait à réserver de la mémoire pour y enregistrer des données pouvant occuper un espace important. C'est le cas des fichiers composés d'une suite (tableau) de structures telles que : typedef
struct On est alors tenté de déclarer ce tableau sous la forme : Fiche Fichier[NB_MAX_FICHES]; Ce qui réserve bien l'espace nécesaire en mémoire. Si on compte y enregistrer tout de suite un nombre de fiches proche de NB_MAX_FICHES, c'est la meilleure solution. Mais, dans les premiers temps de la saisie, peu de fiches sont rentrées et l'espace réservé est abusivement grand vis à vis de l'espace réellement utilisé. Or
la mémoire d'un ordinateur est une ressource partagée avec
les autres programmes actifs. Ce
mécanisme intervient quand la réservation de mémoire
par les programmes actifs dépasse la capacité physique de
la mémoire réelle. Tous ces aller-retour entre mémoire et disque ralentissent considérablement les programmes. Deux solutions :
Pour économiser la mémoire, rien de tel que de n'utiliser à chaque moment que la quantité strictement nécessaire. La méthoode précédente : Fiche Fichier[NB_MAX_FICHES]; ne peut pas être très économe car si on déclare NB_MAX_FICHES = 20, on ne pourra changer ce nombre à 30 ou 40 qu'en recompilant le programme, ce que le client ne peut pas faire. Il est heureusement possible de réserver de la mémoire progressivement, au cours du déroulement du programme, au fur et à mesure des besoins. Attention
! cette opération est de la compétence du système
d'exploitation de votre ordinateur. L'OS (Operating System) ou "système d'exploitation" doit :
Il vaut mieux laisser à l'OS cette gestion compliquée (d'ailleurs on ne peut pas faire autrement). Nous disposons pour cela de deux opérateurs (ce ne sont pas des fonctions) :
Et, aussi de deux fonctions :
La suite vous montrera comment les utiliser Nous
voyons ici les procédures malloc() et free() |
|
Fonctions
malloc(...) et free(...) par des exemples
|
||||||||||||||||||||
|
|
Les
règles
|
|
Réservation puis libération d'une variable : pointeur_de_variable
= Réservation puis libération d'un tableau de variables : pointeur_de_variable
= |
|
|