aligned_alloc
|
Défini dans l'en-tête
<stdlib.h>
|
||
| (depuis C11) | ||
Alloue size octets de stockage non initialisé dont l'alignement est spécifié par alignment . Le paramètre size doit être un multiple entier de alignment .
aligned_alloc
est sûr en contexte multithread : il se comporte comme s'il n'accédait qu'aux emplacements mémoire visibles via son argument, et non à un stockage statique.
Un appel précédent à
free
,
free_sized
, et
free_aligned_sized
(depuis C23)
ou
realloc
qui désalloue une région de mémoire
se synchronise avec
un appel à
aligned_alloc
qui alloue la même région ou une partie de la même région de mémoire. Cette synchronisation se produit après tout accès à la mémoire par la fonction de désallocation et avant tout accès à la mémoire par
aligned_alloc
. Il existe un ordre total unique pour toutes les fonctions d'allocation et de désallocation opérant sur chaque région de mémoire particulière.
Table des matières |
Paramètres
| alignment | - | spécifie l'alignement. Doit être un alignement valide pris en charge par l'implémentation. |
| size | - | nombre d'octets à allouer. Un multiple entier de alignment |
Valeur de retour
En cas de succès, retourne le pointeur vers le début de la mémoire nouvellement allouée. Pour éviter une fuite de mémoire, le pointeur retourné doit être désalloué avec free ou realloc .
En cas d'échec, retourne un pointeur nul.
Notes
Passer une size qui n'est pas un multiple entier de alignment ou un alignment qui n'est pas valide ou non supporté par l'implémentation entraîne l'échec de la fonction et renvoie un pointeur nul (le C11, tel que publié, spécifiait un comportement indéfini dans ce cas, ce qui a été corrigé par DR460 ). La suppression des restrictions de taille pour permettre l'allocation de petits objets à des limites d'alignement restrictives (similaire à alignas ) a été proposée par N2072 .
À titre d'exemple de l'exigence "prise en charge par l'implémentation", la fonction POSIX
posix_memalign
accepte tout
alignment
qui est une puissance de deux et un multiple de
sizeof
(
void
*
)
, et les implémentations basées sur POSIX de
aligned_alloc
héritent de ces exigences.
Les alignements fondamentaux sont toujours pris en charge. Si
alignment
est une puissance de deux et n'est pas supérieur à
_Alignof
(
max_align_t
)
,
aligned_alloc
peut simplement appeler
malloc
.
La fonction
malloc
standard aligne la mémoire de manière appropriée pour tout type d'objet ayant un alignement fondamental. La fonction
aligned_alloc
est utile pour les allocations sur-alignées, comme pour les limites
SSE
, de ligne de cache, ou de
page mémoire virtuelle
.
Cette fonction n'est pas prise en charge dans la bibliothèque d'exécution Microsoft C car son implémentation de
std::free
est
incapable de gérer les allocations alignées
de toute nature. À la place, MS CRT fournit
_aligned_malloc
(à libérer avec
_aligned_free
).
Exemple
Sortie possible :
default-aligned addr: 0x1e40c20 1024-byte aligned addr: 0x1e41000
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.22.3.1 La fonction aligned_alloc (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.22.3.1 La fonction aligned_alloc (p: 253)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.22.3.1 La fonction aligned_alloc (p: 347-348)
Voir aussi
|
Documentation C++
pour
aligned_alloc
|