OpCodes.Unaligned 欄位

定義

表示目前位於評估堆疊頂端的位置可能未對齊緊接 ldindstindldfldstfldldobjstobjinitblkcpblk 指令的正常大小。

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 表示後續指標指令可能未對齊。

堆疊轉換行為會依循序順序為:

  1. 位址會推送至堆疊。

Unaligned會指定位址 (Unmanaged 指標, native int) 堆疊上可能無法對齊緊接在 、stind、、ldfldldobjstfldstobjinitblkcpblk 指令之後ldind的自然大小。 也就是說,針對 Ldind_I4 指示,位址的對齊方式可能不是 4 位元組界限。 針對 initblkcpblk 預設對齊是架構相依 (於 32 位 CPU 上的 4 位元組、64 位 CPU 上的 8 位元組) 。 如果編譯時期不知道對齊方式為8位元組,則不會將其輸出限制為32位字型大小的程式代碼產生器必須使用 unaligned

對齊的值必須是 1、2 或 4,表示產生的程式代碼應該分別假設位址是位元組、雙位元組或四位元組對齊。 請注意, (類型 *) 暫時性指標一律對齊。

雖然指令的 cpblk 對齊方式需要兩個數位 (一個用於來源,另一個用於目的地) ,但如果只指定較低的數位,則效能不會明顯影響。

unalignedvolatile 前置詞可以依任一順序合併。 它們必須緊接在 ldindstindldfldstfld、、ldobjstobjinitblkcpblk 指令之前。 Volatile和指令只允許LdsfldStsfld前置詞。

下列 Emit 方法多載可以使用 unaligned opcode:

適用於