OpCodes.Unaligned 字段

指示当前位于计算堆栈上的地址可能没有与紧接的 ldindstindldfldstfldldobjstobjinitblkcpblk 指令的自然大小对齐。

**命名空间:**System.Reflection.Emit
**程序集:**mscorlib(在 mscorlib.dll 中)

语法

声明
Public Shared ReadOnly Unaligned As OpCode
用法
Dim value As OpCode

value = OpCodes.Unaligned
public static readonly OpCode Unaligned
public:
static initonly OpCode Unaligned
public static final OpCode Unaligned
public static final var Unaligned : OpCode

备注

下表列出了指令的十六进制和 Microsoft 中间语言 (MSIL) 汇编格式,以及简短的参考摘要:

格式

汇编格式

说明

FE 12 < unsigned int8 >

未对齐。 alignment

指示后面的指针指令可以是未对齐的。

堆栈转换行为依次为:

  1. 将地址推送到堆栈上。

Unaligned 指定堆栈上的地址(非托管指针,natural int)可能没有与紧接着的 ldindstindldfldstfldldobjstobjinitblkcpblk 指令的自然大小对齐。也就是说,对于 Ldind_I4 指令,地址的对齐可以不是对于 4 字节边界的。对于 initblkcpblk 而言,默认的对齐是依赖结构的(在 32 位 CPU 上为 4 字节,在 64 位 CPU 上为 8 字节)。如果在编译时不知道对齐是 8 字节的,则不将其输出限制为 32 位词大小的代码生成器必须使用 unaligned

对齐值必须是 1、2 或 4,并且这意味着生成的值应假定地址分别是字节、双字节或四字节对齐的。请注意,瞬态指针(* 类型)始终是对齐的。

尽管 cpblk 指令的对齐逻辑上要求两个数字(一个用于源,一个用于目标),但如果只指定较低数字,这对性能并没有显著的影响。

可以按任意顺序组合 unalignedvolatile 前缀。它们必须紧接在 ldindstindldfldstfldldobjstobjinitblkcpblk 指令的前面。对于 LdsfldStsfld 指令只允许使用 Volatile 前缀。

下面的 Emit 方法重载可以使用 unaligned 操作码:

  • ILGenerator.Emit(OpCode, Label)

  • ILGenerator.Emit(Opcode, long)

平台

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0、1.1、1.0

请参见

参考

OpCodes 类
OpCodes 成员
System.Reflection.Emit 命名空间