Provided by: manpages-fr-dev_3.57d1p1-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 *calloc(size_t nmemb, size_t size);
       void *realloc(void *ptr, 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 intégré. 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 intégré, 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 Linux.

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

       Pour éviter les corruptions d'applications multithreadées,  les  mutex  sont  utilisés  en
       interne  pour  protéger les structures de données de gestion de mémoire utilisées dans ces
       fonctions. Dans une application multithreadée où  les  threads  allouent  et  libèrent  la
       mémoire  en même temps, ces mutex risquent d'entrer en conflit. Pour gérer l'allocation de
       mémoire de façon évolutive  dans  les  applications  multithreadées,  la  glibc  crée  des
       domaines  d'allocation  mémoire  si un conflit de mutex est détecté. Chaque domaine est un
       grand espace de mémoire qui est alloué en interne par le système (en utilisant  brk(2)  ou
       mmap(2)), et géré avec ses propres mutex.

       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  dernières  versions  de  libc Linux (depuis 5.4.23) et de glibc (2.x) contiennent une
       implémentation de malloc() qui est personnalisable à l'aide des variables d'environnement.
       Pour plus de précisions, consultez mallopt(3).

VOIR AUSSI

       brk(2), mmap(2), alloca(3), malloc_get_state(3), malloc_info(3), malloc_trim(3),
       malloc_usable_size(3), mallopt(3), mcheck(3), mtrace(3), posix_memalign(3)

COLOPHON

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

TRADUCTION

       Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
       <http://po4a.alioth.debian.org/> par l'équipe de traduction francophone au sein du projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Christophe Blaess <http://www.blaess.fr/christophe/> (1996-2003), Alain Portal
       <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> ».