OpCodes.Unaligned Pole
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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í ldind
instrukce , , stind
, ldfld
, stobj
initblk
stfld
ldobj
, 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:
- Adresa se vloží do zásobníku.
Unaligned
Určuje, že adresa (nespravovaný ukazatelnative int
) v zásobníku nemusí být zarovnaná s přirozenou velikostí bezprostředně následující ldind
instrukce , , ldobj
stind
stfld
stobj
ldfld
initblk
nebo .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
, ldobj
stfld
, 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: