Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
malloc, calloc, free, realloc - Allocation et liberation dynamiques de
memoire
SYNOPSIS
#include <stdlib.h>
void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
DESCRIPTION
calloc() alloue la memoire necessaire pour un tableau de nmemb elements
de size octets, et renvoie un pointeur vers la memoire allouee. Cette
zone est remplie avec des zeros. Si nmemb ou si size est nulle, calloc
renvoie soit NULL ou un unique pointeur qui pourra etre passe
ulterieurement a free() avec succes.
malloc() alloue size octets, et renvoie un pointeur sur la memoire
allouee. Le contenu de la zone de memoire n'est pas initialise. Si size
est nulle, malloc renvoie soit NULL ou un unique pointeur qui pourra
etre passe ulterieurement a free() avec succes.
free() libere l'espace memoire pointe par ptr, qui a ete obtenu lors
d'un appel anterieur a malloc(), calloc() ou realloc(). Si le pointeur
ptr n'a pas ete obtenu par l'un de ces appels, ou s'il a deja ete
libere avec free(ptr), le comportement est indetermine. Si ptr est
NULL, aucune operation n'est effectuee.
realloc() modifie la taille du bloc de memoire pointe par ptr pour
l'amener a une taille de size octets. realloc() conserve le contenu de
la zone memoire minimum entre la nouvelle et l'ancienne taille. Le
contenu de la zone de memoire nouvellement allouee n'est pas
initialise. Si ptr est NULL, l'appel de realloc() est equivalent a
malloc(size), pour toute valeur de size. Si size vaut zero, l'appel est
equivalent a free(ptr). Si ptr n'est pas NULL, il doit avoir ete obtenu
par un appel anterieur a malloc(), calloc() ou realloc(). Si la zone
pointee etait deplacee, un free(ptr) est effectue.
VALEUR RENVOY'EE
Pour calloc() et malloc(), renvoyer un pointeur de la memoire allouee,
qui est correctement alignee pour n'importe quel type de variable. Si
elles echouent, elles renvoient NULL. NULL peut egalement etre renvoye
par un appel reussi a malloc() avec un parametre size egal a zero, ou
par un appel reussi de calloc() avec nmemb ou size egal a zero.
free() ne renvoie pas de valeur.
realloc() renvoie un pointeur sur la memoire nouvellement allouee, qui
est correctement alignee pour n'importe quel type de variable, et qui
peut etre different de ptr, ou NULL si la demande echoue. Si size vaut
zero, realloc renvoie NULL ou un pointeur acceptable pour free(). Si
realloc() echoue, le bloc memoire original reste intact, il n'est ni
libere ni deplace.
CONFORMIT'E
C89, C99.
NOTES
En general, malloc() alloue la memoire depuis le tas, et ajuste la
taille du tas en consequence avec sbrk(2). Lorsque les bloques de
memoire alloues sont plus larges que MMAP_THRESHOLD octets,
l'implementation de la glibc de malloc alloue la memoire selon un
projection anonyme privee avec mmap(2). MMAP_THRESHOLD vaut 128 Ko par
defaut et il est ajustable avec mallopt(3). Les allocations realisees
avec mmap(2) ne sont pas affectees par la limitation de ressource
RLIMIT_DATA (consultez getrlimit(2)).
Le standard Unix98 necessite que malloc(), calloc() et realloc()
positionnent errno a ENOMEM en cas d'echec. La glibc suppose qu'il en
est ainsi (et les versions glibc de ces routines le font). Si vous
utilisez une implementation personnelle de malloc qui ne positionne pas
errno, certaines routines de bibliotheques peuvent echouer sans donner
de raison dans errno.
Lorsqu'un programme echoue durant un appel a malloc(), calloc(),
realloc() ou free(), ceci est presque toujours le signe d'une
corruption du tas. Ceci survient generalement en cas de debordement
d'un bloc memoire alloue, ou en liberant deux fois le meme pointeur.
Les versions recentes de la bibliotheque libc de Linux (posterieures a
5.4.23) et de la bibliotheque glibc 2.x incluent une implementation de
malloc() dont on peut configurer le comportement a l'aide de variables
d'environnement. Quand la variable MALLOC_CHECK_ existe, les appels a
malloc() emploient une implementation speciale (moins efficace) mais
plus tolerante a l'encontre des bogues simples, comme le double appel a
free() avec le meme argument, ou lors d'un debordement de tampon d'un
seul octet (bogues de surpassement d'une unite, ou oubli d'un caractere
nul final d'une chaine). Il n'est toutefois pas possible de se proteger
contre toutes les erreurs de ce type, et l'on risque de voir des fuites
de memoire se produire. Si la variable MALLOC_CHECK_ vaut zero, toutes
les corruptions du tas detectees sont ignorees silencieusement. Si elle
vaut 1, un message de diagnostic est affiche sur stderr. Si elle vaut
2, la fonction abort(3) est appelee immediatement. Si elle vaut 3, un
message de diagnostic est affiche sur stderr et le programme est
arrete. L'utilisation des valeurs non nulle de MALLOC_CHECK_ peut etre
utile car un crash pourrait se produire ulterieurement, et il serait
tres difficile de trouver la cause du probleme.
BOGUES
Par defaut, Linux suit une strategie d'allocation optimiste. Ceci
signifie que lorsque malloc() renvoie une valeur non NULL, il n'y a
aucune garantie que la memoire soit veritablement disponible. C'est
vraiment un bogue ennuyeux. Dans le cas ou le systeme manque de
memoire, un ou plusieurs processus seront tues par l'infame << OOM
killer >> (gestionnaire de memoire) . Si Linux est utilise dans des
circonstances ou il n'est pas souhaitable de perdre soudainement des
processus lances aleatoirement, et si de plus la version du noyau est
suffisamment recente, il est possible de desactiver ce comportement
avec une commande comme :
# echo 2 > /proc/sys/vm/overcommit_memory
Consultez egalement les fichiers vm/overcommit-accounting et
sysctl/vm.txt dans le repertoire de la documentation du noyau.
VOIR AUSSI
brk(2), mallopt(3), mmap(2), alloca(3), posix_memalign(3)
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Florentin
Duneau et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.