OpCodes.Unaligned 欄位
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示目前位於評估堆疊頂端的位置可能未對齊緊接 ldind
、stind
、ldfld
、stfld
、ldobj
、stobj
、initblk
或 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
欄位值
備註
下表列出指示的十六進位和 Microsoft Intermediate Language (MSIL) 元件格式,以及簡短的參考摘要:
格式 | 元件格式 | Description |
---|---|---|
FE 12 <unsigned int8 > |
未對齊。 alignment |
表示後續指標指令可能未對齊。 |
堆疊轉換行為會依循序順序為:
- 位址會推送至堆疊。
Unaligned
會指定位址 (Unmanaged 指標, native int
) 堆疊上可能無法對齊緊接在 、stind
、、ldfld
、ldobj
stfld
stobj
initblk
或 cpblk
指令之後ldind
的自然大小。 也就是說,針對 Ldind_I4 指示,位址的對齊方式可能不是 4 位元組界限。 針對 initblk
和 cpblk
預設對齊是架構相依 (於 32 位 CPU 上的 4 位元組、64 位 CPU 上的 8 位元組) 。 如果編譯時期不知道對齊方式為8位元組,則不會將其輸出限制為32位字型大小的程式代碼產生器必須使用 unaligned
。
對齊的值必須是 1、2 或 4,表示產生的程式代碼應該分別假設位址是位元組、雙位元組或四位元組對齊。 請注意, (類型 *
) 暫時性指標一律對齊。
雖然指令的 cpblk
對齊方式需要兩個數位 (一個用於來源,另一個用於目的地) ,但如果只指定較低的數位,則效能不會明顯影響。
unaligned
和 volatile
前置詞可以依任一順序合併。 它們必須緊接在 ldind
、stind
、ldfld
stfld
、、ldobj
、stobj
、 initblk
或 cpblk
指令之前。
Volatile和指令只允許LdsfldStsfld前置詞。
下列 Emit 方法多載可以使用 unaligned
opcode: