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 superiore allo stack di valutazione potrebbe non essere allineato alle dimensioni naturali dell'istruzione immediatamente seguenteldind, , ldfldstind, stfldldobjstobj, , initblk, o .cpblk
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 di assembly MSIL (Intermediate Language) esadecimale e Microsoft istruzione, insieme a un breve riepilogo di riferimento:
| Formato | Formato assembly | Descrzione |
|---|---|---|
FE 12 <unsigned int8> |
Allineato. alignment |
Indica che l'istruzione del puntatore successiva potrebbe non essere allineata. |
Il comportamento transitorio dello stack, in ordine sequenziale, è:
- Viene eseguito il push di un indirizzo nello stack.
Unalignedspecifica che l'indirizzo (un puntatore non gestito, native int) nello stack potrebbe non essere allineato alle dimensioni naturali dell'istruzione immediatamente seguenteldind, , ldobjstindstfldstobjldfldinitblko .cpblk Ciò significa che per un'istruzione Ldind_I4 l'allineamento dell'indirizzo potrebbe non corrispondere a un limite a 4 byte. Per initblk e cpblk l'allineamento predefinito dipende dall'architettura (4 byte su CPU a 32 bit, 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 essere usati unaligned se l'allineamento non è noto in fase di compilazione per essere a 8 byte.
Il valore di allineamento deve essere 1, 2 o 4 e significa che il codice generato deve presupporre che l'indirizzo sia di 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 notevole 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, stind, ldfldstfld, ldobj, stobj, 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 operativo: