Loading

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 (voir
   feature_test_macros(7)) :

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

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

       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     de     bloc.     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.23  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

       Cette  page  de  manuel  a  été traduite par Stéphan Rafin <stephan DOT
       rafin AT laposte DOT net> en 2002, puis a été mise  à  jour  par  Alain
       Portal  <aportal  AT  univ-montp2  DOT  fr>  jusqu’en  2006,  et mise à
       disposition sur http://manpagesfr.free.fr/.

       Les mises à jour et corrections de la version présente dans Debian sont
       directement         gérées         par         Nicolas         François
       <nicolas.francois@centraliens.net>   et   l’équipe    francophone    de
       traduction de Debian.

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