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

NOM

       posix_memalign, memalign, valloc - Allocation de mémoire alignée

SYNOPSIS

       #include <stdlib.h>

       int posix_memalign(void **memptr, size_t alignment, size_t size);

       #include <malloc.h>

       void *valloc(size_t size);
       void *memalign(size_t boundary, size_t size);

   Exigences    de    macros    de   test   de   fonctionnalités   pour   la   glibc   (consultez
   feature_test_macros(7)) :

       posix_memalign() : _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600

       valloc() :
           Depuis la glibc 2.12 :
               _BSD_SOURCE ||
                   (_XOPEN_SOURCE >= 500 ||
                       _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
                   !(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
           Avant la glibc 2.12 :
               _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

DESCRIPTION

       La fonction posix_memalign() alloue size octets et place l'adresse de la  mémoire  allouée
       dans  *memptr.  L'adresse de la mémoire allouée est un multiple de alignment, qui doit lui
       même être une puissance de deux et un multiple de sizeof(void *). Si size  vaut  0,  alors
       posix_memalign()  renvoie  soit  NULL, soit une valeur de pointeur unique qui peut ensuite
       être fournie à free(3).

       La fonction obsolète memalign() alloue size octets et renvoie un pointeur vers la  mémoire
       allouée.  L'adresse mémoire est alors un multiple de boundary, qui doit être une puissance
       de deux.

       La fonction obsolète valloc() alloue size octets et renvoie un pointeur  vers  la  mémoire
       allouée.  L'adresse mémoire est alors un multiple de la taille de page. Cette fonction est
       équivalente à memalign(sysconf(_SC_PAGESIZE),size).

       Pour ces trois routines, la mémoire n'est pas initialisée à zéro.

VALEUR RENVOYÉE

       memalign() et valloc() renvoient un pointeur sur la mémoire allouée, ou bien  NULL  si  la
       requête échoue.

       posix_memalign()   renvoie  zéro  en  cas  de  succès,  ou  l'une  des  valeurs  d'erreurs
       répertoriées dans la section suivante en cas d'échec. Notez que errno n'est  pas  affectée
       par cette fonction.

ERREURS

       EINVAL Le paramètre alignment n'est pas une puissance de deux, ou n'est pas un multiple de
              sizeof(void *).

       ENOMEM Mémoire insuffisante pour réaliser la demande d'allocation.

VERSIONS

       Les fonctions memalign() et valloc() sont disponibles dans toutes les  bibliothèques  libc
       de Linux. La fonction posix_memalign() est disponible depuis la glibc 2.1.91.

CONFORMITÉ

       La fonction valloc() est apparue dans BSD 3.0. Elle est qualifiée d'obsolète dans BSD 4.3,
       et d'historique dans SUSv2. Elle n'apparaît pas dans POSIX.1-2001. La fonction  memalign()
       est  apparue dans SunOS 4.1.3 mais pas dans BSD 4.4. La fonction posix_memalign() provient
       de POSIX.1d.

   En-têtes
       Tout le monde est d'accord sur le fait que posix_memalign() est déclarée dans <stdlib.h>.

       Sur certains systèmes, memalign() est déclaré dans <stdlib.h> au lieu de <malloc.h>.

       Conformément à SUSv2, valloc() est déclaré dans <stdlib.h>. Libc4,5 et glibc le  déclarent
       dans  <malloc.h>  et  peut-être  également  dans  <stdlib.h> (à savoir, si _GNU_SOURCE est
       définie, ou _BSD_SOURCE  est  définie,  ou,  pour  glibc,  si  _XOPEN_SOURCE_EXTENDED  est
       définie,  ou, de manière équivalente, _XOPEN_SOURCE est définie à une valeur qui n'est pas
       plus petite que 500).

NOTES

       Il y a des restrictions d'alignement sur beaucoup de systèmes, par exemple sur les tampons
       utilisés  pour  les  entrées-sorties  directes des périphériques blocs. POSIX spécifie que
       l'appel pathconf(path,_PC_REC_XFER_ALIGN) indique quel alignement est nécessaire. On  peut
       à présent utiliser posix_memalign() pour satisfaire cette condition.

       posix_memalign()  vérifie  qu'alignment  répond  bien  aux exigences détaillées ci-dessus.
       memalign() est susceptible de ne pas contrôler que le paramètre boundary est correct.

       La norme POSIX impose que la mémoire obtenue par un appel à posix_memalign()  puisse  être
       libérée  en  utilisant free(3). Certains systèmes ne fournissent aucun moyen de libérer la
       mémoire allouée par memalign() ou valloc() (parce que l'on  peut  seulement  passer  comme
       paramètre  à  free(3) un pointeur obtenu via malloc(3), alors que, par exemple, memalign()
       pourrait appeler malloc(3) et aligner par la suite la valeur obtenue). L'implémentation de
       la  glibc  permet  de  libérer  la  mémoire  obtenue  par  n'importe laquelle de ces trois
       fonctions par appel à free(3).

       L'implépmentation de la glibc de malloc(3) renvoie toujours des adresses mémoire  alignées
       sur  8 octets,  ainsi  ces  routines  ne  sont  nécessaires qu'en cas de besoin de valeurs
       d'alignement plus grandes.

VOIR AUSSI

       brk(2), getpagesize(2), free(3), malloc(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/>.

       Stéphan  Rafin  (2002),  Alain  Portal  <URL:http://manpagesfr.free.fr/> (2006).   Nicolas
       François 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> ».