OpCodes.Unaligned Pole
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wskazuje, że adres obecnie na szczycie stosu oceny może nie być wyrównany do naturalnego rozmiaru natychmiast po ldind
, ldobj
stind
stfld
stobj
ldfld
initblk
lub cpblk
instrukcji.
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
Wartość pola
Uwagi
W poniższej tabeli wymieniono format zestawu szesnastkowy i microsoft intermediate language (MSIL) instrukcji wraz z krótkim podsumowaniem referencyjnym:
Format | Format zestawu | Opis |
---|---|---|
FE 12 <unsigned int8 > |
Niewyrównanych. alignment |
Wskazuje, że kolejna instrukcja wskaźnika może być nieprzygotowana. |
Zachowanie przejściowe stosu w kolejności sekwencyjnej to:
- Adres jest wypychany do stosu.
Unaligned
Określa, że adres (wskaźnik niezarządzany, native int
) na stosie może nie być wyrównany do naturalnego rozmiaru natychmiast następującej ldind
instrukcji , , stind
ldobj
stfld
stobj
ldfld
initblk
lub .cpblk
Oznacza to, że w Ldind_I4 przypadku instrukcji wyrównanie adresu może nie być granicą 4 bajtów. W przypadku initblk
i cpblk
domyślne wyrównanie jest zależne od architektury (4 bajty na 32-bitowych procesorach CPU, 8 bajtów na 64-bitowych procesorach CPU). Generatory kodu, które nie ograniczają ich danych wyjściowych do rozmiaru 32-bitowego wyrazu, muszą być używane unaligned
, jeśli wyrównanie nie jest znane w czasie kompilacji jako 8 bajtów.
Wartość wyrównania musi być 1, 2 lub 4 i oznacza, że wygenerowany kod powinien zakładać, że adres jest bajtowy, dwubajtowy lub czterobajtowy, odpowiednio wyrównany. Należy pamiętać, że wskaźniki przejściowe (typ *
) są zawsze wyrównane.
Chociaż wyrównanie cpblk
instrukcji wymagałoby logicznie dwóch liczb (jeden dla źródła i jednego dla miejsca docelowego), nie ma zauważalnego wpływu na wydajność, jeśli zostanie określona tylko niższa liczba.
Prefiksy unaligned
i volatile
można połączyć w jednej kolejności. Muszą one natychmiast poprzedzać instrukcję ldind
, , stfld
ldobj
ldfld
stobj
stind
initblk
lub .cpblk
Volatile Tylko prefiks jest dozwolony dla instrukcji Ldsfld iStsfld.
Następujące Emit przeciążenia metody mogą używać unaligned
kodu opcode: