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
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
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
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)…