NOM¶
posix_memalign, aligned_alloc, memalign, valloc, pvalloc - Allocation de
mémoire alignée
SYNOPSIS¶
#include <stdlib.h>
int posix_memalign(void **memptr, size_t alignment, size_t size);
void *aligned_alloc(size_t alignment, size_t size);
void *valloc(size_t size);
#include <malloc.h>
void *memalign(size_t alignment, size_t size);
void *pvalloc(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
aligned_alloc(): _ISOC11_SOURCE
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
Le fichier d'en-tête (non standard) <malloc.h>
déclare également valloc() ; aucune macro de test de
fonctionnalité n'est nécessaire.
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
alignment, qui doit être une puissance de
deux.
La fonction
aligned_alloc() est identique à
memalign(),
excepté que
size doit être un multiple de
alignment.
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).
La fonction obsolète
pvalloc() est similaire à
valloc(),
mais arrondit la taille de l'allocation au multiple supérieur de la
taille de page système.
Pour toutes ces fonctions, la mémoire n'est pas initialisée à
zéro.
VALEUR RENVOYÉE¶
aligned_alloc(),
memalign(),
valloc() et
pvalloc()
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(),
valloc() et
pvalloc() sont
disponibles dans toutes les bibliothèques libc de Linux.
La fonction
aligned_alloc() est disponible depuis la glibc 2.16.
La fonction
posix_memalign() est disponible depuis la glibc 2.1.94.
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
pvalloc() est une extension GNU.
La fonction
memalign() est apparue dans SunOS 4.1.3 mais pas dans
BSD 4.4.
La fonction
posix_memalign() provient de POSIX.1d.
La fonction
aligned_alloc() est spécifiée dans le standard C11.
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 également dans
<stdlib.h> si les
macros de test adéquates sont définies (voir au-dessus).
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
alignment 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 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 fonctions 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.44 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¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Stéphan Rafin (2002), Alain Portal
<
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> ».