OpCodes.Unaligned フィールド

定義

評価スタックの現在の上にあるアドレスが、直後の ldindstindldfldstfldldobjstobjinitblk、または 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) アセンブリ形式と、簡単なリファレンス概要を示します。

フォーマット アセンブリ形式 Description
FE 12 <unsigned int8> 不整列。 alignment 後続のポインター命令がアラインされていない可能性があることを示します。

スタック遷移の動作は、順番に次のようになります。

  1. アドレスがスタックにプッシュされます。

Unaligned は、スタック上のアドレス (アンマネージ ポインター、 native int) が、直後の ldindstindldfldstfldldobjstobjinitblk、または cpblk 命令の自然なサイズに合わせられない可能性があることを指定します。 つまり、 Ldind_I4 命令の場合、アドレスのアラインメントが 4 バイト境界に設定されていない可能性があります。 initblkcpblkの場合、既定のアラインメントはアーキテクチャに依存します (32 ビット CPU では 4 バイト、64 ビット CPU では 8 バイト)。 出力を 32 ビットワード サイズに制限しないコード ジェネレーターでは、コンパイル時にアラインメントが 8 バイトであることが不明な場合は、 unaligned を使用する必要があります。

アラインメントの値は 1、2、または 4 である必要があります。つまり、生成されるコードでは、アドレスがそれぞれバイト、2 バイト、またはクワッド バイトでアラインされていると想定する必要があります。 一時的なポインター (型 *) は常に配置されることに注意してください。

cpblk命令のアラインメントには論理的に 2 つの数値 (ソース用に 1 つ、宛先用に 1 つ) が必要ですが、小さい数値のみが指定されている場合、パフォーマンスに顕著な影響はありません。

unalignedプレフィックスとvolatile プレフィックスは、どちらの順序でも組み合わせることができます。 ldindstindldfldstfldldobjstobjinitblk、またはcpblk命令の直前に置く必要があります。 VolatileおよびLdsfld命令では、Stsfld プレフィックスのみが許可されます。

次の Emit メソッドオーバーロードでは、 unaligned オペコードを使用できます。

適用対象