OpCodes.Unaligned OpCodes.Unaligned OpCodes.Unaligned OpCodes.Unaligned Field

定義

現在評価スタックの一番上にあるアドレスが、直後の ldindstindldfldstfldldobjstobjinitblk または cpblk の各命令の通常サイズに合わせて配置されていない可能性があることを示します。Indicates that an address currently atop the evaluation stack might not be aligned to the natural size of the immediately following ldind, stind, ldfld, stfld, ldobj, stobj, initblk, or cpblk instruction.

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 中間言語 (MSIL) のアセンブリ形式と、簡単なリファレンスの概要を示しています。The following table lists the instruction's hexadecimal and Microsoft Intermediate Language (MSIL) assembly format, along with a brief reference summary:

形式Format アセンブリ形式Assembly Format 説明Description
FE 12 < unsigned int8 >FE 12 < unsigned int8 > 揃え.unaligned. alignment 後続のポインター命令が整列していない可能性があることを示します。Indicates that the subsequent pointer instruction may be unaligned.

スタックの移行動作は、次の順序で実行されます。The stack transitional behavior, in sequential order, is:

  1. アドレスがスタックにプッシュされます。An address is pushed onto the stack.

Unaligned に指定すると、スタック上のアドレス (アンマネージポインター、native int) が、直後の ldindstindldfldstfldldobjstobjinitblk、または cpblk の各命令の自然サイズに配置されない可能性があります。Unaligned specifies that the address (an unmanaged pointer, native int) on the stack might not be aligned to the natural size of the immediately following ldind, stind, ldfld, stfld, ldobj, stobj, initblk, or cpblk instruction. つまり、Ldind_I4 命令の場合、アドレスのアラインメントを4バイト境界にすることはできません。That is, for a Ldind_I4 instruction the alignment of the address may not be to a 4-byte boundary. @No__t-0 および cpblk の場合、既定のアラインメントはアーキテクチャに依存します (32 ビット Cpu では4バイト、64ビット Cpu では8バイト)。For initblk and cpblk the default alignment is architecture dependent (4-byte on 32-bit CPUs, 8-byte on 64-bit CPUs). コンパイル時に8バイトになるように配置が認識されない場合、出力を32ビットワードサイズに制限しないコードジェネレーターでは unaligned を使用する必要があります。Code generators that do not restrict their output to a 32-bit word size must use unaligned if the alignment is not known at compile time to be 8-byte.

アラインメントの値は1、2、または4である必要があります。生成されたコードでは、アドレスがバイト、2バイト、または4バイトでアラインされていると想定する必要があります。The value of alignment must be 1, 2, or 4 and means that the generated code should assume that the address is byte, double-byte, or quad-byte aligned, respectively. 遷移ポインター (型 *) は常にアラインされることに注意してください。Note that transient pointers (type *) are always aligned.

@No__t-0 命令のアラインメントでは、論理的に2つの数値が必要になりますが (1 つはソース用、もう1つは変換先用)、低い数値のみが指定されている場合、パフォーマンスに顕著な影響はありません。While the alignment for a cpblk instruction would logically require two numbers (one for the source and one for the destination), there is no noticeable impact on performance if only the lower number is specified.

@No__t-0 および volatile のプレフィックスは、どちらの順序でも組み合わせることができます。The unaligned and volatile prefixes can be combined in either order. @No__t-0、`stind`、`ldfld`、`stfld`、@no__t 4、stobjinitblk、または cpblk 命令の直前に配置する必要があります。They must immediately precede a ldind, stind, ldfld, stfld, ldobj, stobj, initblk, or cpblk instruction. @No__t-1 と @no__t 2 の手順では、@no__t 0 のプレフィックスのみを使用できます。Only the Volatile prefix is allowed for the Ldsfld and Stsfld instructions.

次の Emit メソッドオーバーロードは、unaligned オペコードを使用できます。The following Emit method overloads can use the unaligned opcode:

  • ILGenerator (オペコード, Label)ILGenerator.Emit(OpCode, Label)

  • ILGenerator (オペコード、Byte)ILGenerator.Emit(Opcode, Byte)

適用対象