Gestion dynamique en C d’une zone mémoire accessible par un seul programme.


L’allocation dynamique autorise la déclaration d’une zone de données utilisateur dont la taille et la durée d’allocation peuvent changer en fonction des besoins. Des primitives simples permettent la gestion de cette mémoire. Cette zone mémoire n’est accessible que par le programme qui l’a créé. Elle est interdite en lecture comme en écriture pour tous les autres programmes.

 

Allocation d’une zone mémoire

Image non trouvée !Suivant l'environnement utilisé,

char *malloc (unsigned short size) ;
char *calloc(unsigned short nelem, unsigned short elsize) ;

ou

void *malloc (unsigned short size) ;
void *calloc(unsigned short nelem, unsigned short elsize) ;

malloc permet de demander l’allocation de size octets et retourne un pointeur sur la zone allouée. Celle-ci n’est pas initialisée, elle peut donc contenir n’importe quoi.

calloc permet de demander l’allocation de nelem éléments de taille elsize, et retourne un pointeur sur la zone allouée, celle-ci est initialisée avec des 0.

En cas d’échec, les fonctions retournent la valeur NULL. La taille d’une zone mémoire ne peut dépasser 65536 octets.

 

Modification de la taille d’une zone mémoire

Image non trouvée !Suivant l'environnement utilisé,

char *realloc(char *ptr, unsigned short size) ;

ou

void *realloc(void *ptr, unsigned short size) ;

realloc permet de modifier la taille d’une zone alloué déjà existante. Un nouveau pointeur sur la zone est éventuellement retourné. Le contenu de l’ancienne zone est conservé.

En cas d’échec, les fonctions retournent la valeur NULL. La taille d’une zone mémoire ne peut dépasser 65536 octets.

 

Libération d’une zone mémoire

Image non trouvée !Suivant l'environnement utilisé,

void free(char *ptr) ;

ou

void free(void *ptr) ;

La zone pointée par ptr est libérée.

 

Quelques commandes de manipulation

Voir le chapitre sur les comandes de base du C

 

Gestion dynamique d’une zone mémoire partagée sous unix.

Pour un processus, il lui est possible de mettre à disposition d’autres processus une zone mémoire appelé mémoire partagée, qui permet ainsi l’échange de données entre plusieurs processus.
Ceci est rendu possible grâce au System V IPC. Ce dispositif permet de réduire les appels au noyau par rapport à l’utilisation de PIPE (Cf. Le pipe ou tube) ou files de messages (cf. Les files de messages).
Ce principe de gestion de la mémoire dépassant le cadre de ce chapitre, il sera étudié plus en détail dans le chapitre suivant Communications inter-processus (SYSTEM V IPC)…