POSIX_MEMALIGN(3) Manuel du programmeur Linux POSIX_MEMALIGN(3) NOM posix_memalign, memalign, valloc - Allocation de mmoire aligne. SYNOPSIS #include <stdlib.h> int posix_memalign(void **memptr, size_t alignment, size_t size); void *memalign(size_t boundary, size_t size); void *valloc(size_t size); DESCRIPTION La fonction posix_memalign() alloue size octets et place l'adresse de la mmoire alloue dans *memptr. L'adresse de la mmoire alloue est un multiple de alignment, qui doit lui mme tre une puissance de deux et un multiple de sizeof(void *). La fonction obsolte memalign() alloue size octets et renvoie un poin- teur vers la mmoire alloue. L'adresse mmoire est alors un multi- ple de boundary, qui doit tre une puissance de deux. La fonction obsolte valloc() alloue size octets et renvoie un poin- teur vers la mmoire alloue. L'adresse mmoire est alors un multi- ple de la taille de page. Cette fonction est quivalente mema- lign(sysconf(_SC_PAGESIZE),size). Pour ces trois routines, la mmoire n'est pas initialise zro. VALEUR RENVOYE memalign() et valloc() renvoient un pointeur sur la mmoire alloue, ou bien NULL si la requte choue. posix_memalign() renvoie zro en cas de succs, ou l'une des valeurs d'erreurs rpertories dans la section suivante en cas d'chec. Notez que errno n'est pas affecte par cette fonction. ERREURS EINVAL Le paramtre alignment n'est pas une puissance de deux, ou n'est pas un multiple de sizeof(void *). ENOMEM Mmoire insuffisante pour raliser la demande d'allocation. NOTES posix_memalign() vrifie que alignment rpond bien aux exigences dtailles ci dessus. memalign() est susceptible de ne pas contrler que le paramtre boundary est correct. La norme POSIX impose que la mmoire obtenue par un appel posix_memalign() puisse tre libre en utilisant free(). Certains systmes ne fournissent aucun moyen afin de librer la mmoire alloue par memalign() ou valloc() (parce que l'on peut seulement passer comme paramtre 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 librer la mmoire obtenue par n'importe laquelle de ces trois fonctions par appel free(). La version(1,3,5) libc GNU de malloc() renvoie toujours des adresses mmoire alignes sur 8-octets, ainsi ces routines ne sont ncessaires qu'en cas de besoin de valeurs d'alignement plus grandes. HISTORIQUE Les fonctions memalign() et valloc() sont disponibles dans toutes les bibliothques 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 qualifie d'obsolte dans BSD 4.3, et de lgende dans SUSv2. Elle n'apparat 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. VOIR AUSSI malloc(3), free(3), getpagesize(2), brk(2) TRADUCTION Stphan Rafin, 2002. LDP 21 juillet 2003 POSIX_MEMALIGN(3)