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