OpCodes.Unaligned Feld

Definition

Gibt an, dass eine Adresse, die sich momentan oben auf dem Stapel befindet, möglicherweise nicht an der eigentlichen Größe der unmittelbar darauf folgenden ldind-Anweisung, stind-Anweisung, ldfld-Anweisung, stfld-Anweisung, ldobj-Anweisung, stobj-Anweisung, initblk-Anweisung oder cpblk-Anweisung ausgerichtet ist.

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 

Feldwert

Hinweise

In der folgenden Tabelle sind das Hexadezimal- und MSIL-Assemblyformat (Microsoft Intermediate Language) der Anweisung sowie eine kurze Referenzzusammenfassung aufgeführt:

Format Assemblyformat BESCHREIBUNG
FE 12 <unsigned int8> Unaligned. alignment Gibt an, dass die nachfolgende Zeigeranweisung möglicherweise nicht ausgerichtet ist.

Das Übergangsverhalten des Stapels in sequenzieller Reihenfolge lautet:

  1. Eine Adresse wird in den Stapel gepusht.

Unalignedgibt an, dass die Adresse (ein nicht verwalteter Zeiger, native int) auf dem Stapel möglicherweise nicht an der natürlichen Größe der direkt folgenden ldindAnweisungen , , stind, ldfld, stfld, initblkldobjstobj, oder cpblk ausgerichtet ist. Das heißt, für eine Ldind_I4 Anweisung ist die Ausrichtung der Adresse möglicherweise nicht an einer 4-Byte-Grenze. Für initblk und cpblk ist die Standardausrichtung architekturabhängig (4-Byte auf 32-Bit-CPUs, 8 Byte auf 64-Bit-CPUs). Codegeneratoren, die ihre Ausgabe nicht auf eine 32-Bit-Wortgröße beschränken, müssen verwenden unaligned , wenn die Ausrichtung zur Kompilierzeit nicht als 8-Byte bekannt ist.

Der Wert der Ausrichtung muss 1, 2 oder 4 sein und bedeutet, dass der generierte Code davon ausgehen sollte, dass die Adresse byte, double-byte oder quad-byte ausgerichtet ist. Beachten Sie, dass vorübergehende Zeiger (Typ *) immer ausgerichtet sind.

Während die Ausrichtung für eine cpblk Anweisung logisch zwei Zahlen erfordern würde (eine für die Quelle und eine für das Ziel), gibt es keine spürbaren Auswirkungen auf die Leistung, wenn nur die niedrigere Zahl angegeben wird.

Die unaligned Präfixe und volatile können in jeder Reihenfolge kombiniert werden. Sie müssen unmittelbar einer ldind- , stind, ldfld, stfld, ldobjstobj, initblk- oder cpblk -Anweisung vorangehen. Für die Anweisungen und Stsfld ist nur das LdsfldVolatile Präfix zulässig.

Die folgenden Emit Methodenüberladungen können den unaligned Opcode verwenden:

Gilt für: