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 中介語言(MSIL)組合格式,並附有簡短參考摘要:

Format 組裝格式 Description
FE 12 <unsigned int8> 無陣營。 alignment 表示後續指標指令可能是未對齊的。

堆疊的過渡行為依序為:

  1. 一個位址會被推送到堆疊上。

Unaligned指定堆疊上的位址(非管理指標 native int)可能不與緊接著ldind的 、 stindldfldstfldldobjstobjinitblk指令cpblk的自然大小對齊。 也就是說,對於指令 Ldind_I4 來說,位址的對齊可能不一定是 4 位元組的邊界。 對於 initblkcpblk ,預設對齊依架構而異(32 位元 CPU 為 4 位元組,64 位元 CPU 為 8 位元組)。 若不限制輸出為 32 位元字長的程式碼產生器,若編譯時未確定對齊為 8 位元組,則必須使用unaligned

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

雖然指令的對齊 cpblk 邏輯上需要兩個數字(一個給來源,一個代表目的地),但如果只指定較低的數字,對效能沒有明顯影響。

unalignedvolatile 前綴可以任意順序組合。 它們必須緊接在 ldindstindldfldstfldldobjstobjinitblk, , 或cpblk指令之前。 僅 Volatile 允許 LdsfldStsfld 指令的前綴。

以下 Emit 方法的超載可使用操作 unaligned 碼:

適用於