OpCodes.Unaligned Pole

Definice

Označuje, že adresa, která je aktuálně na vrcholu zásobníku hodnocení, nemusí být zarovnaná s přirozenou velikostí bezprostředně následující ldindinstrukce , , stind, ldfld, stobjinitblkstfldldobj, nebo .cpblk

public static readonly System.Reflection.Emit.OpCode Unaligned;

Hodnota pole

Poznámky

Následující tabulka uvádí šestnáctkový formát sestavení instrukce a formát sestavení MSIL (Microsoft Intermediate Language) spolu se stručným přehledem referencí:

Formát Formát sestavení Description
FE 12 <unsigned int8> Unaligned. alignment Označuje, že následující instrukce ukazatele nemusí být zarovnaná.

Přechodné chování zásobníku v sekvenčním pořadí je:

  1. Adresa se vloží do zásobníku.

UnalignedUrčuje, že adresa (nespravovaný ukazatelnative int) v zásobníku nemusí být zarovnaná s přirozenou velikostí bezprostředně následující ldindinstrukce , , ldobjstindstfldstobjldfldinitblknebo .cpblk To znamená, že pro Ldind_I4 instrukce nesmí být zarovnání adresy na 4 bajtovou hranici. Pro initblk a cpblk je výchozí zarovnání závislé na architektuře (4 bajty na 32bitových procesorech, 8 bajtů na 64bitových procesorech). Generátory kódu, které neomezují svůj výstup na 32bitovou velikost slova, musí použít unaligned , pokud není známo, že zarovnání je v době kompilace 8 bajtů.

Hodnota zarovnání musí být 1, 2 nebo 4 a znamená, že vygenerovaný kód by měl předpokládat, že adresa je zarovnaná na bajt, dvoubajtový nebo čtyřbajtový kód. Všimněte si, že přechodné ukazatele (typ *) jsou vždy zarovnané.

I když by zarovnání instrukce cpblk logicky vyžadovalo dvě čísla (jedno pro zdroj a jedno pro cíl), nemá žádný znatelný dopad na výkon, pokud je zadáno pouze nižší číslo.

Předpony unaligned a volatile lze kombinovat v libovolném pořadí. Musí bezprostředně předcházet pokynu ldind, stind, , ldfld, ldobjstfld, stobj, initblk, nebo cpblk . Volatile Pro instrukce a Stsfld je povolena pouze předponaLdsfld.

Emit Následující přetížení metody mohou použít unaligned opcode:

Platí pro

Produkt Verze
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0