OpCodes.Unaligned Campo

Definizione

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

  1. Un indirizzo viene eseguito il push nello stack.

Unalignedspecifica che l'indirizzo (un puntatore non gestito, native int) nello stack potrebbe non essere allineato alla dimensione naturale dell'istruzione , stfldstindldindldobjstobjldfldinitblko .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, stfldldobjldfldstobjstind, 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:

Si applica a