Sdílet prostřednictvím


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 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 

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