OpCodes.Unaligned Campo

Definizione

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, è:

  1. 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:

Si applica a