Condividi tramite


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