#include <stddef.h> // <cstddef> en C++
Le type max_align_t, introduit par C11, possède un alignement au moins aussi contraignant que celui des types fondamentaux
scalaires de la plate-forme. Il est utile quand on réserve une zone mémoire brute qui devra ensuite pouvoir accueillir différents types de
valeurs.
L'exemple suivant utilise max_align_t dans une union pour forcer un alignement suffisamment général.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stddef.h> #include <stdio.h> #include <stdlib.h> union Storage { max_align_t alignment; unsigned char bytes[64]; }; int main() { union Storage storage; printf( "sizeof storage == %lu\n", (unsigned long) sizeof storage ); printf( "alignment == %lu\n", (unsigned long) _Alignof( max_align_t ) ); return EXIT_SUCCESS; } |
Les valeurs exactes dépendent de la plate-forme. Sur une machine courante, les résultats produits peuvent être :
sizeof storage == 64 alignment == 16
Le type max_align_t ne remplace pas les mécanismes d'allocation mémoire : les fonctions comme
malloc garantissent déjà un alignement adapté pour les types fondamentaux. Il devient surtout
intéressant lorsque vous construisez vous-même un tampon de stockage.
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :