Namespaces
Variants

std:: assume_aligned

From cppreference.net
Memory management library
( exposition only* )
Allocators
Uninitialized memory algorithms
Constrained uninitialized memory algorithms
Memory resources
Uninitialized storage (until C++20)
( until C++20* )
( until C++20* )
( until C++20* )

Garbage collector support (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
(C++11) (until C++23)
Défini dans l'en-tête <memory>
template < std:: size_t N, class T >
constexpr T * assume_aligned ( T * ptr ) ;
(depuis C++20)

Informe l'implémentation que l'objet pointé par ptr est aligné d'au moins N . L'implémentation peut utiliser cette information pour générer du code plus efficace, mais elle ne peut faire cette hypothèse que si l'objet est accédé via la valeur de retour de assume_aligned .

N doit être une puissance de 2. Le comportement est indéfini si ptr ne pointe pas vers un objet de type T (en ignorant les qualifications cv à chaque niveau), ou si l'alignement de l'objet n'est pas au moins N .

Table des matières

Valeur de retour

ptr .

Exceptions

Ne lance rien.

Notes

Pour garantir que le programme bénéficie des optimisations activées par assume_aligned , il est important d'accéder à l'objet via sa valeur de retour :

void f(int* p)
{
    int* p1 = std::assume_aligned<256>(p);
    // Utilisez p1, et non p, pour garantir le bénéfice de l'hypothèse d'alignement.
    // Cependant, le programme a un comportement indéfini si p n'est pas aligné
    // indépendamment de l'utilisation de p1.
}

Il incombe au programme de garantir que l'hypothèse d'alignement soit réellement respectée. Un appel à assume_aligned n'amène pas le compilateur à vérifier ou à imposer cette condition.

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_assume_aligned 201811L (C++20) std::assume_aligned

Exemple

Voir aussi

alignof (C++11) interroge les exigences d'alignement d'un type
(opérateur)
alignas (C++11) spécifie que le stockage de la variable doit être aligné selon une valeur spécifique
(spécificateur)
(depuis C++11) (obsolète en C++23)
définit le type approprié pour une utilisation comme stockage non initialisé pour des types de taille donnée
(modèle de classe)
(C++11)
aligne un pointeur dans un tampon
(fonction)
[[ assume ( expression )]]
(C++23)
spécifie que l' expression sera toujours évaluée à true à un point donné
(spécificateur d'attribut)