Participer au site avec un Tip
Rechercher
 

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 :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

Type max_align_t (C11)

Le type wchar_t Le type nullptr_t


Entête à inclure

#include <stddef.h>  // <cstddef> en C++

Type max_align_t

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;
}
Préparer une zone de stockage alignée

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.

Sujets connexes

La librairie stddef.h
malloc
size_t


Le type wchar_t Le type nullptr_t




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé