Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

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> >>.