Programmer en langage C
200
© Éditions Eyrolles
En général, l’allocation par calloc de p blocs de n octets conduira à utiliser un peu moins de
mémoire que p allocations de n octets par malloc ; cela provient de ce que les éventuels
octets de service ne seront attribués qu’une fois dans le premier cas (pour le système, il n’y a
bien qu’une seule zone, même si nous avons formulé notre demande à malloc sous la forme
de plusieurs blocs), alors qu’ils le seront p fois dans le second.
La remarque faite précédemment à propos des contraintes d’alignement s’applique également
à calloc.
Une zone allouée par calloc ne peut être libérée qu’en une seule fois par free. Il n’est pas
question d’essayer de n’en libérer qu’un morceau (comme nous l’avons déjà dit, les octets
alloués par calloc forment un tout pour le système).
2.2 La fonction realloc
La fonction :
void * realloc (void * pointeur, size_t taille )
(stdlib.h)
permet de modifier la taille d’une zone préalablement allouée (par malloc, calloc ou
realloc).
Le pointeur doit être l’adresse de début de la zone dont on veut modifier la taille. Quant à
taille, de type size_t, elle représente la nouvelle taille souhaitée.
Cette fonction restitue l’adresse de la nouvelle zone ou un pointeur nul dans le cas où l’allocation a échoué.
Lorsque la nouvelle taille demandée est supérieure à l’ancienne, le contenu de l’ancienne zone
est conservé (quitte à le recopier si la nouvelle adresse est différente de l’ancienne). Dans le
cas où la nouvelle taille est inférieure à l’ancienne, le début de l’ancienne zone (c’est-à-dire
taille octets) verra son contenu inchangé.
3 Exemple d’application de la gestion dynamique : création
d’une liste chaînée
Comme nous l’avons déjà évoqué en introduction de ce chapitre, il n’est pas possible de déclarer un tableau dont le nombre d’éléments n’est pas connu lors de la compilation. En revanche,
les possibilités de gestion dynamique du langage C nous permettent d’envisager d’allouer des
emplacements aux différents éléments du tableau au fur et à mesure des besoins.
Delannoy Livre.book Page 200 Mercredi, 6. mai 2009 4:26 16
Précédent

- 213/281

Suivant