posix_memalign(3) Library Functions Manual posix_memalign(3) NOM posix_memalign, aligned_alloc, memalign, valloc, pvalloc -- Allocation de memoire alignee BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include int posix_memalign(void **memptr, size_t alignement, size_t taille); void *aligned_alloc(size_t alignement, size_t size); [[obsolete]] void *valloc(size_t taille); #include [[obsolete]] void *memalign(size_t alignement, size_t taille); [[obsolete]] void *pvalloc(size_t taille); Exigences de macros de test de fonctionnalites pour la glibc (consulter feature_test_macros(7)) : posix_memalign() : _POSIX_C_SOURCE >= 200112L aligned_alloc() : _ISOC11_SOURCE valloc() : Depuis la glibc 2.12 : (_XOPEN_SOURCE >= 500) && !(_POSIX_C_SOURCE >= 200112L) || /* glibc >= 2.19 : */ _DEFAULT_SOURCE || /* glibc <= 2.19 : */ _SVID_SOURCE || _BSD_SOURCE Avant la glibc 2.12 : _BSD_SOURCE || _XOPEN_SOURCE >= 500 DESCRIPTION posix_memalign() alloue taille octets et place l'adresse de la memoire allouee dans *memptr. L'adresse de la memoire allouee est un multiple de alignement, qui doit lui-meme etre une puissance de deux et un multiple de sizeof(void *). Cette adresse peut etre plus tard passee a free(3). Si taille vaut 0, alors la valeur dans *memptr est soit NULL, soit une valeur de pointeur unique. La fonction obsolete memalign() alloue taille octets et renvoie un pointeur vers la memoire allouee. L'adresse memoire est alors un multiple de alignement, qui doit etre une puissance de deux. aligned_alloc() est identique a memalign() excepte que alignement doit etre une puissance de deux. La fonction obsolete valloc() alloue taille octets et renvoie un pointeur vers la memoire allouee. L'adresse memoire est alors un multiple de la taille de page. Cette fonction est equivalente a memalign(sysconf(_SC_PAGESIZE),size). La fonction obsolete pvalloc() est similaire a valloc() mais arrondit la taille de l'allocation au multiple superieur de la taille de page systeme. Pour toutes ces fonctions, la memoire n'est pas initialisee a zero. VALEUR RENVOYEE aligned_alloc(), memalign(), valloc() et pvalloc() renvoient un pointeur sur la memoire allouee si elles reussissent. En cas d'erreur, NULL est renvoye et errno indique la cause de l'erreur. posix_memalign() renvoie zero en cas de succes ou l'une des valeurs d'erreurs repertoriees dans la section suivante en cas d'echec. La valeur de errno n'est pas modifiee. Sur Linux (et d'autres systemes), posix_memalign() ne modifie pas memptr en cas d'erreur. Une exigence normalisant ce comportement a ete ajoutee dans POSIX.1-2008 TC2. ERREURS EINVAL Le parametre alignement n'est pas une puissance de deux ou n'est pas un multiple de sizeof(void *). ENOMEM Plus assez de memoire. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +--------------------------+--------------------------+----------------+ |Interface | Attribut | Valeur | +--------------------------+--------------------------+----------------+ |aligned_alloc(), | Securite des threads | MT-Safe | |memalign(), | | | |posix_memalign() | | | +--------------------------+--------------------------+----------------+ |valloc(), pvalloc() | Securite des threads | MT-Unsafe init | +--------------------------+--------------------------+----------------+ STANDARDS aligned_alloc() C11. posix_memalign() POSIX.1-2008. memalign() valloc() Aucun pvalloc() GNU. HISTORIQUE aligned_alloc() glibc 2.16. C11. posix_memalign() glibc 2.1.91. POSIX.1d, POSIX.1-2001. memalign() glibc 2.0. SunOS 4.1.3. valloc() glibc 2.0. 3.0BSD. Qualifiee d'obsolete dans 4.3BSD et d'historique dans SUSv2. pvalloc() glibc 2.0. En-tetes Tout le monde est d'accord sur le fait que posix_memalign() est declaree dans . Sur certains systemes, memalign() est declaree dans au lieu de . Conformement a SUSv2, valloc() est declaree dans . La glibc la declare dans et egalement dans si les macros de test de fonctionnalite adequates sont definies (voir ci-dessus). NOTES Il y a des restrictions d'alignement sur beaucoup de systemes, par exemple sur les tampons utilises pour les entrees-sorties directes des peripheriques blocs. POSIX specifie que l'appel pathconf(path,_PC_REC_XFER_ALIGN) indique quel alignement est necessaire. On peut a present utiliser posix_memalign() pour satisfaire cette condition. posix_memalign() verifie que l'alignement repond bien aux exigences detaillees ci-dessus. memalign() est susceptible de ne pas controler que le parametre alignement soit correct. La norme POSIX impose que la memoire obtenue par un appel a posix_memalign() puisse etre liberee en utilisant free(3). Certains systemes ne fournissent aucun moyen de liberer la memoire allouee par memalign() ou valloc() (parce qu'on peut seulement passer comme parametre a free(3) un pointeur obtenu a l'aide de malloc(3), alors que, par exemple, memalign() pourrait appeler malloc(3) et aligner par la suite la valeur obtenue). L'implementation de la glibc permet de liberer la memoire obtenue par n'importe laquelle de ces fonctions par un appel a free(3). L'implementation de la glibc de malloc(3) renvoie toujours des adresses memoire alignees sur 8 octets, ainsi ces fonctions ne sont necessaires qu'en cas de besoin de valeurs d'alignement plus grandes. VOIR AUSSI brk(2), getpagesize(2), free(3), malloc(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Gregoire Scano Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.8 2 mai 2024 posix_memalign(3)