OpCodes.Unaligned Campo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Indica che un indirizzo attualmente all'inizio dello stack di valutazione potrebbe non essere allineato rispetto alla dimensione standard dell'istruzione ldind
, stind
, ldfld
, stfld
, ldobj
, stobj
, initblk
o cpblk
immediatamente successiva.
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
Valore del campo
Commenti
La tabella seguente elenca il formato dell'assembly esadecimale e Microsoft Intermediate Language (MSIL), insieme a un breve riepilogo di riferimento:
Formato | Formato assembly | Descrizione |
---|---|---|
FE 12 <unsigned int8 > |
Allineato. alignment |
Indica che l'istruzione del puntatore successivo potrebbe non essere idonea. |
Il comportamento di transizione dello stack, in ordine sequenziale, è:
- Un indirizzo viene eseguito il push nello stack.
Unaligned
specifica che l'indirizzo (un puntatore non gestito, native int
) nello stack potrebbe non essere allineato alla dimensione naturale dell'istruzione , stfld
stind
ldind
ldobj
stobj
ldfld
initblk
o .cpblk
Vale a dire, per un'istruzione Ldind_I4 l'allineamento dell'indirizzo potrebbe non essere a un limite di 4 byte. Per initblk
e cpblk
l'allineamento predefinito dipende dall'architettura (4 byte su CPU a 32 bit, a 8 byte su CPU a 64 bit). I generatori di codice che non limitano l'output a una dimensione di parola a 32 bit devono usare unaligned
se l'allineamento non è noto in fase di compilazione da 8 byte.
Il valore di allineamento deve essere 1, 2 o 4 e significa che il codice generato deve presumere che l'indirizzo sia byte, doppio byte o quad-byte allineato rispettivamente. Si noti che i puntatori temporanei (tipo *
) sono sempre allineati.
Sebbene l'allineamento per un'istruzione cpblk
richieda logicamente due numeri (uno per l'origine e uno per la destinazione), non vi è alcun impatto evidente sulle prestazioni se viene specificato solo il numero inferiore.
I unaligned
prefissi e volatile
possono essere combinati in entrambi gli ordini. Devono precedere immediatamente un'istruzione ldind
, stfld
ldobj
ldfld
stobj
stind
, initblk
, o .cpblk
Solo il Volatile prefisso è consentito per le Ldsfld istruzioni e Stsfld .
Gli overload del metodo seguenti Emit possono usare il unaligned
codice opcode: