Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

NOM

       malloc, free, calloc, realloc - Allocation et libération dynamiques de mémoire

SYNOPSIS

       #include <stdlib.h>

       void *malloc(size_t size);
       void free(void *ptr);
       void *realloc(void *ptr, size_t size);
       void *calloc(size_t nmemb, size_t size);

DESCRIPTION

       La fonction malloc() alloue size octets, et renvoie un pointeur sur la mémoire allouée. Le
       contenu de la zone de mémoire n'est pas initialisé. Si size est nulle, malloc renvoie soit
       NULL ou un unique pointeur qui pourra être passé ultérieurement à free() avec succès.

       La  fonction  free()  libère  l'espace  mémoire pointé par ptr, qui a été obtenu lors d'un
       appel antérieur à malloc(), calloc() ou realloc(). Si le pointeur ptr n'a pas  été  obtenu
       par  l'un  de  ces  appels,  ou s'il a déjà été libéré avec free(ptr), le comportement est
       indéterminé. Si ptr est NULL, aucune opération n'est effectuée.

       La fonction calloc() alloue la mémoire nécessaire pour un tableau  de  nmemb  éléments  de
       size  octets,  et renvoie un pointeur vers la mémoire allouée. Cette zone est remplie avec
       des zéros. Si nmemb ou si size est nulle, calloc renvoie soit NULL ou un  unique  pointeur
       qui pourra être passé ultérieurement à free() avec succès.

       La  fonction  realloc() modifie la taille du bloc de mémoire pointé par ptr à la taille de
       size octets. Le contenu de la mémoire entre la zone de départ et  la  plus  petite  taille
       entre  la  nouvelle et l'ancienne taille n'est pas modifié. Si la nouvelle taille est plus
       grande que l'ancienne taille, le contenu de la zone de mémoire nouvellement allouée  n'est
       pas  initialisé. Si ptr est NULL, l'appel est équivalent à malloc(size), pour toute valeur
       de size ; si size vaut zéro et ptr est non NULL, l'appel est équivalent  à  free(ptr).  Si
       ptr  est  NULL,  il  doit  avoir été obtenu par un appel antérieur à malloc(), calloc() ou
       realloc(). Si la zone pointée était déplacée, un free(ptr) est effectué.

VALEUR RENVOYÉE

       Les fonctions malloc() et calloc() renvoient un pointeur vers la mémoire allouée, qui  est
       correctement  alignée  pour  n'importe  quel  type  de  variable. Si elles échouent, elles
       renvoient NULL. NULL peut également être renvoyé par un appel réussi à  malloc()  avec  un
       paramètre  size  égal à zéro, ou par un appel réussi de calloc() avec nmemb ou size égal à
       zéro.

       La fonction free() ne renvoie pas de valeur.

       La fonction realloc() renvoie un pointeur sur la mémoire  nouvellement  allouée,  qui  est
       correctement  alignée  pour n'importe quel type de variable, et qui peut être différent de
       ptr, ou NULL si la demande échoue. Si size vaut zéro, realloc renvoie NULL ou un  pointeur
       acceptable  pour  free().  Si  realloc() échoue, le bloc mémoire original reste intact, il
       n'est ni libéré ni déplacé.

CONFORMITÉ

       C89, C99.

NOTES

       Par défaut, Linux suit une stratégie d'allocation optimiste.  Ceci  signifie  que  lorsque
       malloc()  renvoie  une  valeur  non  NULL,  il  n'y  a aucune garantie que la mémoire soit
       véritablement disponible. Dans le cas où le système manque de  mémoire,  un  ou  plusieurs
       processus  seront  tués  par  l'infâme « OOM killer » (gestionnaire de mémoire). Pour plus
       d'informations,   consultez   la   description   de   /proc/sys/vm/overcommit_memory    et
       /proc/sys/vm/oom_adj       dans       proc(5),       ainsi       que       le      fichier
       Documentation/vm/overcommit-accounting des sources du noyau.

       En général, malloc() alloue la mémoire depuis le tas,  et  ajuste  la  taille  du  tas  en
       conséquence  avec  sbrk(2).  Lorsque  les  bloques de mémoire alloués sont plus larges que
       MMAP_THRESHOLD octets, l'implémentation de la glibc de malloc alloue la mémoire  selon  un
       projection  anonyme  privée  avec mmap(2). MMAP_THRESHOLD vaut 128 Ko par défaut et il est
       ajustable avec mallopt(3). Les allocations réalisées avec mmap(2) ne  sont  pas  affectées
       par la limitation de ressource RLIMIT_DATA (consultez getrlimit(2)).

       Le  standard  UNIX  98  nécessite que malloc(), calloc() et realloc() positionnent errno à
       ENOMEM en cas d'échec. La glibc suppose qu'il en est ainsi (et les versions glibc  de  ces
       routines  le  font).  Si  vous  utilisez  une  implémentation personnelle de malloc qui ne
       positionne pas errno, certaines routines de bibliothèques peuvent échouer sans  donner  de
       raison dans errno.

       Lorsqu'un programme échoue durant un appel à malloc(), calloc(), realloc() ou free(), ceci
       est presque toujours le signe d'une corruption du tas. Ceci survient généralement  en  cas
       de débordement d'un bloc mémoire alloué, ou en libérant deux fois le même pointeur.

       Les  versions  récentes  de la bibliothèque libc de Linux (postérieures à 5.4.23) et de la
       bibliothèque glibc 2.x incluent une implémentation de malloc() dont on peut configurer  le
       comportement  à  l'aide  de  variables  d'environnement.  Quand  la variable MALLOC_CHECK_
       existe, les appels à malloc() emploient une implémentation spéciale (moins efficace)  mais
       plus  tolérante  à  l'encontre  des bogues simples, comme le double appel à free() avec le
       même argument, ou lors d'un débordement de tampon d'un seul octet (bogues de  surpassement
       d'une  unité,  ou  oubli  d'un  caractère  nul final d'une chaîne). Il n'est toutefois pas
       possible de se protéger contre toutes les erreurs de ce type, et l'on risque de  voir  des
       fuites  de  mémoire  se  produire.  Si  la  variable  MALLOC_CHECK_  vaut zéro, toutes les
       corruptions du tas détectées sont ignorées silencieusement. Si elle vaut 1, un message  de
       diagnostic  est  affiché  sur  stderr.  Si  elle  vaut 2, la fonction abort(3) est appelée
       immédiatement. Si elle vaut 3, un message de diagnostic  est  affiché  sur  stderr  et  le
       programme est arrêté. L'utilisation des valeurs non nulle de MALLOC_CHECK_ peut être utile
       car un crash pourrait se produire ultérieurement, et il serait très difficile  de  trouver
       la cause du problème.

VOIR AUSSI

       brk(2), mallopt(3), mmap(2), alloca(3), posix_memalign(3)

COLOPHON

       Cette  page  fait partie de la publication 3.32 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <URL:http://po4a.alioth.debian.org/> par l'équipe 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'équipe francophone  de
       traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>  ou  par  un  rapport  de  bogue   sur   le   paquet
       manpages-fr.

       Vous  pouvez  toujours  avoir  accès  à la version anglaise de ce document en utilisant la
       commande « man -L C <section> <page_de_man> ».