POSIX_MEMALIGN
Section: Manuel du programmeur Linux (3) Updated: 21 juillet 2003 Index
NOM
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
NOTES
HISTORIQUE
CONFORMITÉ
VOIR AUSSI
TRADUCTION
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);
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 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
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.
VOIR AUSSI
TRADUCTION
Stéphan Rafin, 2002.
|