std:: assume_aligned
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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
|
Cette section est incomplète
Raison : aucun 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) |