次の方法で共有


OpCodes.Unaligned フィールド

現在評価スタックの一番上にあるアドレスが、直後の ldindstindldfldstfldldobjstobjinitblk または cpblk の各命令の通常サイズに合わせて配置されていない可能性があることを示します。

Public Shared ReadOnly Unaligned As OpCode
[C#]
public static readonly OpCode Unaligned;
[C++]
public: static OpCode Unaligned;
[JScript]
public static var Unaligned : OpCode;

解説

命令の 16 進数の形式、MSIL (Microsoft Intermediate Language) アセンブリ形式、および簡単な説明の一覧を次の表に示します。

形式 アセンブリ形式 説明
FE 12 < unsigned int8 > unaligned. alignment 後続のポインタ命令が配置されていない可能性があることを示します。

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

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

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

配置の値は 1、2 または 4 にする必要があります。これは、それぞれ、生成されるコードのアドレスが 1 バイト、2 バイト、または 4 バイトに配置されることを表します。遷移ポインタ (* 型) は、常に配置されます。

cpblk 命令の配置は、論理的には 2 つの値 (配置元の値と配置先の値) を必要としますが、2 つの値のうち小さい方の値だけを指定した場合、パフォーマンスへの影響はほとんどありません。

unaligned プリフックスと volatile プリフィックスは、任意の順序で組み合わせることができます。これらは ldindstindldfldstfldldobjstobjinitblk 、または cpblk の各命令の直前に置く必要があります。 Ldsfld 命令と Stsfld 命令に使用できるのは、 Volatile プリフィックスだけです。

unaligned オペコードを使用できる Emit コンストラクタ オーバーロードを次に示します。

  • ILGenerator.Emit(OpCode, Label)
  • ILGenerator.Emit(Opcode, long)

必要条件

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

参照

OpCodes クラス | OpCodes メンバ | System.Reflection.Emit 名前空間