Freigeben über


OpCodes.Unaligned-Feld

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.

Namespace: System.Reflection.Emit
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
Public Shared ReadOnly Unaligned As OpCode
'Usage
Dim value As OpCode

value = OpCodes.Unaligned
public static readonly OpCode Unaligned
public:
static initonly OpCode Unaligned
public static final OpCode Unaligned
public static final var Unaligned : OpCode

Hinweise

In der folgenden Tabelle werden das hexadezimale und das Assemblyformat der MSIL (Microsoft Intermediate Language) jeweils mit einer Kurzreferenz aufgeführt:

Format

Assemblyformat

Beschreibung

FE 12 < unsigned int8 >

unaligned. alignment

Gibt an, dass die nachfolgende Zeigeranweisung möglicherweise nicht ausgerichtet ist.

Im Stapel laufen die folgenden Aktionen in der angegebenen Reihenfolge ab:

  1. Eine Adresse wird auf dem Stapel abgelegt.

Unaligned gibt an, dass die Adresse (ein nicht verwalteter Zeiger, natural int) auf dem Stapel 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. Das bedeutet z. B., dass die Ausrichtung der Adresse für eine Ldind_I4-Anweisung möglicherweise keine 4-Byte-Begrenzung ist. Die Standardausrichtung für initblk und cpblk ist abhängig von der Architektur (4 Bytes bei 32-Bit-CPUs, 8 Bytes bei 64-Bit-CPUs). Code-Generatoren, deren Ausgabe nicht auf eine Wortgröße von 32 Bits beschränkt ist, müssen unaligned verwenden, wenn zur Kompilierzeit nicht bekannt ist, ob die Ausrichtung 8 Bytes beträgt.

Der Wert der Ausrichtung muss 1, 2 oder 4 sein. Dies bedeutet, dass der generierte Code davon ausgeht, dass die Adresse in Bytes, Doppelbytes bzw. Vierfachbytes ausgerichtet ist. Beachten Sie, dass flüchtige Zeiger (Typ *) immer ausgerichtet werden.

Während für die Ausrichtung einer cpblk-Anweisung logisch zwei Zahlen erforderlich sind (eine für die Quelle und eine für das Ziel), hat es keine spürbaren Auswirkungen auf die Leistung, wenn nur die kleinere Zahl festgelegt wird.

Das unaligned-Präfix und das volatile-Präfix können in beliebiger Reihenfolge miteinander kombiniert werden. Sie müssen unmittelbar einer ldind-Anweisung, stind-Anweisung, ldfld-Anweisung, stfld-Anweisung, ldobj-Anweisung, stobj-Anweisung, initblk-Anweisung oder cpblk-Anweisung vorangehen. Für die Ldsfld-Anweisung und die Stsfld-Anweisung darf nur das Volatile-Präfix verwendet werden.

Die folgenden Überladungen der Emit-Methode verwenden den unaligned-Opcode:

  • ILGenerator.Emit(OpCode, Label)

  • ILGenerator.Emit(OpCode, long)

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

OpCodes-Klasse
OpCodes-Member
System.Reflection.Emit-Namespace