Provided by: manpages-fr_1.67.0-1_all bug

NOM

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

SYNOPSIS

       #define _XOPEN_SOURCE 600
       #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);

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

       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.

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 satifaire
       cette condition.

       posix_memalign()  vérifie  que  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().  Certains
       systèmes ne fournissent aucun moyen afin de libérer la mémoire  allouée
       par  memalign() ou valloc() (parce que l’on peut seulement passer comme
       paramètre à free() un pointeur obtenu  via  malloc(),  Alors  que  e.g.
       memalign()  pourrait appeler malloc() et aligner par la suite la valeur
       obtenue).  La libc  GNU  permet  de  libérer  la  mémoire  obtenue  par
       n’importe laquelle de ces trois fonctions par appel à free().

       La  version  libc GNU de malloc() 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.

HISTORIQUE

       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 de légende dans SUSv2. Elle n’apparaît plus
       dans  SUSv3.   La fonction memalign() est apparue dans SunOS 4.1.3 mais
       pas dans BSD 4.4.   La  fonction  posix_memalign()  provient  de  POSIX
       1003.1d.

ENTÊTES

       Tout  le  monde  est  d’accord  que  posix_memalign()  est déclaré dans
       <stdlib.h>. Pour le déclarer, la glibc a besoin  que  _GNU_SOURCE  soit
       définie, ou que _XOPEN_SOURCE soit définie à une valeur qui ne soit pas
       plus petite que 600.

       Tout le monde est d’accord que memalign() est déclaré dans  <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).

VOIR AUSSI

       malloc(3), free(3), getpagesize(2), brk(2).

TRADUCTION

       Stéphan Rafin, 2002.