OpCodes.Unaligned Champ
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Indique qu'une adresse actuellement située en haut de la pile d'évaluation peut ne pas être alignée avec la taille naturelle de l'instruction ldind
, stind
, ldfld
, stfld
, ldobj
, stobj
, initblk
ou cpblk
qui suit immédiatement.
public: static initonly System::Reflection::Emit::OpCode Unaligned;
public static readonly System.Reflection.Emit.OpCode Unaligned;
staticval mutable Unaligned : System.Reflection.Emit.OpCode
Public Shared ReadOnly Unaligned As OpCode
Valeur de champ
Remarques
Le tableau suivant répertorie le format d’assembly MSIL et hexadécimal de l’instruction, ainsi qu’un bref résumé des références :
Format | Format d’assembly | Description |
---|---|---|
FE 12 <unsigned int8 > |
non aligné. alignment |
Indique que l’instruction de pointeur suivante peut être non alignée. |
Le comportement transitoire de la pile, dans l’ordre séquentiel, est le suivant :
- Une adresse est envoyée dans la pile.
Unaligned
spécifie que l’adresse (pointeur non managé, native int
) sur la pile peut ne pas être alignée sur la taille naturelle de l’instruction , stind
, ldobj
ldfld
stfld
stobj
initblk
ou cpblk
qui suit ldind
immédiatement. Autrement dit, pour une Ldind_I4 instruction, l’alignement de l’adresse peut ne pas être sur une limite de 4 octets. Pour initblk
et cpblk
l’alignement par défaut dépend de l’architecture (4 octets sur les processeurs 32 bits, 8 octets sur les processeurs 64 bits). Les générateurs de code qui ne limitent pas leur sortie à une taille de mot 32 bits doivent utiliser unaligned
si l’alignement n’est pas connu au moment de la compilation comme étant de 8 octets.
La valeur de l’alignement doit être 1, 2 ou 4, ce qui signifie que le code généré doit supposer que l’adresse est alignée sur octets, sur deux octets ou sur quatre octets, respectivement. Notez que les pointeurs temporaires (type *
) sont toujours alignés.
Bien que l’alignement d’une cpblk
instruction nécessite logiquement deux nombres (un pour la source et un pour la destination), il n’y a aucun impact notable sur les performances si seul le nombre inférieur est spécifié.
Les unaligned
préfixes et volatile
peuvent être combinés dans l’un ou l’autre ordre. Ils doivent immédiatement précéder une ldind
instruction , stind
, ldfld
, stfld
, stobj
ldobj
, , initblk
, ou cpblk
. Seul le Volatile préfixe est autorisé pour les Ldsfld instructions et Stsfld .
Les surcharges de méthode suivantes Emit peuvent utiliser l’opcode unaligned
: