OpCodes.Unaligned Pole

Definicja

Wskazuje, że adres obecnie na szczycie stosu oceny może nie być wyrównany do naturalnego rozmiaru natychmiast po ldind, ldobjstindstfldstobjldfldinitblklub 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:

  1. Adres jest wypychany do stosu.

UnalignedOkreśla, że adres (wskaźnik niezarządzany, native int) na stosie może nie być wyrównany do naturalnego rozmiaru natychmiast następującej ldindinstrukcji , , stindldobjstfldstobjldfldinitblklub .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, , stfldldobjldfldstobjstindinitblklub .cpblk Volatile Tylko prefiks jest dozwolony dla instrukcji Ldsfld iStsfld.

Następujące Emit przeciążenia metody mogą używać unaligned kodu opcode:

Dotyczy