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) アセンブリ形式と、簡単な参照の概要を示します。

形式 アセンブリ形式 説明
FE 12 <unsigned int8> 不整列。 alignment 後続のポインター命令がアラインされていないことを示します。

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

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

Unalignedは、スタック上のアドレス (アンマネージド ポインター、) が、直後の 、stfldstobjldobjinitblkldfldstindnative 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、どちらの順序でも組み合わせることができます。 これらは、、、stindldfldstobjstfldldobjinitblkまたは cpblk 命令の直前に置くldind必要があります。 および 命令にはVolatileプレフィックスのみが使用できますLdsfldStsfld

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

適用対象