align |
Alignement |
Visual C++ .NET |
Syntaxe
__declspec( align( # ) ) declarator
|
Paramètres
Nom |
Description |
declarator |
Ce paramètre permet d'indiquer les données que vous déclarez alignées. |
# |
Ce paramètre permet d'indiquer la valeur d'alignement. |
Description
Ce mot réservé permet de contrôler l'alignement.
Remarques
- A partir de Visual Studio 2015 et versions ultérieures, utilisez le spécificateur
alignas d'alignement standard C++11 pour contrôler l'alignement.
- L'écriture d'applications utilisant les dernières instructions du microprocesseur introduit de nouvelles contraintes et problèmes. De nombreuses nouvelles
instructions nécessitent des données alignées sur des limites de 16 octets. De plus, en alignant les données fréquemment utilisées sur la taille de la ligne de cache du
microprocesseur, vous améliorez les performances du cache. Par exemple, si vous définissez une structure dont la taille est inférieure à 32 octets, vous souhaiterez
peut-être un alignement sur 32 octets pour vous assurer que les objets de ce type de structure sont efficacement mis en cache.
- # est la valeur d'alignement. Les entrées valides sont des puissances entières de deux comprises entre 1 et 8192 (octets), telles que 2, 4, 8, 16, 32 ou 64.
declarator correspond aux données que vous déclarez alignées.
- Vous pouvez utiliser __declspec(align(#)) lorsque vous définissez une structure, une union ou une classe, ou lorsque vous déclarez une variable.
- Le compilateur ne garantit ni ne tente de préserver l'attribut d'alignement des données lors d'une opération de copie ou de transformation de données. Par
exemple, memcpy peut copier une structure déclarée avec __declspec(align(#)) vers n'importe quel emplacement. Les répartiteurs ordinaires (par
exemple, malloc, l'opérateur C++ new et les répartiteurs Win32) renvoient généralement de la mémoire n'étant pas suffisamment
alignée pour les structures ou les tableaux de structures __declspec(align(#)). Pour garantir que la destination d'une opération de copie ou de transformation de
données est correctement alignée, utilisez _aligned_malloc ou, écrivez votre propre répartiteur.
- Vous ne pouvez pas spécifier l'alignement des paramètres de fonction. Lorsque vous transmettez des données qui ont un attribut d'alignement par valeur sur la pile,
son alignement est contrôlé par la convention d'appel. Si l'alignement des données est important dans la fonction appelée, copiez le paramètre dans la mémoire
correctement alignée avant utilisation.
- Sans __declspec(align(#)), le compilateur aligne généralement les données sur des limites naturelles en fonction du processeur cible et de la taille des données,
jusqu'à des limites de 4 octets sur les processeurs 32 bits et des limites de 8 octets sur 64 bits processeurs. Les données des classes ou des structures sont alignées
dans la classe ou la structure au minimum de son alignement naturel et du paramètre d'emballage actuel (à partir de #pragma pack ou de l'option du compilateur /Zp).
Dernière mise à jour : Lundi, le 25 Octobre 2021