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
フィールド値
注釈
次の表に、命令の 16 進数と Microsoft Intermediate Language (MSIL) アセンブリ形式と、簡単な参照の概要を示します。
形式 | アセンブリ形式 | 説明 |
---|---|---|
FE 12 <unsigned int8 > |
不整列。 alignment |
後続のポインター命令がアラインされていないことを示します。 |
スタック遷移の動作は、順番に次のようになります。
- アドレスがスタックにプッシュされます。
Unaligned
は、スタック上のアドレス (アンマネージド ポインター、) が、直後の 、stfld
stobj
ldobj
initblk
ldfld
stind
、native int
または cpblk
命令の自然なサイズに揃えられない可能性があることを指定します。ldind
つまり、命令の場合 Ldind_I4 、アドレスのアラインメントが 4 バイト境界に設定されていない可能性があります。
initblk
と の場合、cpblk
既定のアラインメントはアーキテクチャに依存します (32 ビット CPU では 4 バイト、64 ビット CPU では 8 バイト)。 コンパイル時にアラインメントが 8 バイトであることが不明な場合は、出力を 32 ビットワード サイズに制限しないコード ジェネレーターを使用 unaligned
する必要があります。
alignment の値は 1、2、または 4 である必要があります。つまり、生成されるコードでは、アドレスがバイト、2 バイト、または 4 バイトのアラインメントであると見なす必要があります。 一時的なポインター (型 *
) は常に配置されることに注意してください。
命令のアラインメント cpblk
には論理的に 2 つの数値 (ソース用と変換先用の 1 つの数値) が必要ですが、小さい数値のみを指定した場合、パフォーマンスに顕著な影響はありません。
プレフィックスと volatile
プレフィックスはunaligned
、どちらの順序でも組み合わせることができます。 これらは、、、stind
ldfld
、stobj
stfld
ldobj
initblk
または cpblk
命令の直前に置くldind
必要があります。 および 命令にはVolatileプレフィックスのみが使用できますLdsfld。Stsfld
次 Emit のメソッド オーバーロードでは、オペコードを unaligned
使用できます。
適用対象
.NET