OpCodes.Unaligned 欄位
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示目前位於評估堆疊頂端的位址可能未與緊接著的 ldind、 stind、 ldfldstfld、 ldobjstobjinitblk或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 中介語言(MSIL)組合格式,並附有簡短參考摘要:
| Format | 組裝格式 | Description |
|---|---|---|
FE 12 <unsigned int8> |
無陣營。 alignment |
表示後續指標指令可能是未對齊的。 |
堆疊的過渡行為依序為:
- 一個位址會被推送到堆疊上。
Unaligned指定堆疊上的位址(非管理指標 native int)可能不與緊接著ldind的 、 stind、 ldfldstfld、 ldobjstobjinitblk指令cpblk的自然大小對齊。 也就是說,對於指令 Ldind_I4 來說,位址的對齊可能不一定是 4 位元組的邊界。 對於 initblk 和 cpblk ,預設對齊依架構而異(32 位元 CPU 為 4 位元組,64 位元 CPU 為 8 位元組)。 若不限制輸出為 32 位元字長的程式碼產生器,若編譯時未確定對齊為 8 位元組,則必須使用unaligned
對齊值必須為 1、2 或 4,並表示產生的程式碼應假設位址分別為位元組、雙位元組或四位元組對齊。 請注意,暫態指標(類型 *)總是對齊的。
雖然指令的對齊 cpblk 邏輯上需要兩個數字(一個給來源,一個代表目的地),但如果只指定較低的數字,對效能沒有明顯影響。
unaligned和 volatile 前綴可以任意順序組合。 它們必須緊接在 ldind, stind, ldfldstfldldobjstobjinitblk, , 或cpblk指令之前。 僅 Volatile 允許 Ldsfld 和 Stsfld 指令的前綴。
以下 Emit 方法的超載可使用操作 unaligned 碼: