OpCodes.Unaligned Feld
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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:
- Eine Adresse wird in den Stapel gepusht.
Unaligned
gibt 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 ldind
Anweisungen , , stind
, ldfld
, stfld
, initblk
ldobj
stobj
, 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
, ldobj
stobj
, 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: