Compartir a través de


OpCodes.Unaligned Campo

Definición

Indica que una dirección que se encuentra actualmente en la parte superior de la pila de evaluación puede no estar alineada con el tamaño natural de la instrucción máquina ldind, stind, ldfld, stfld, ldobj, stobj, initblk o cpblk inmediatamente posterior.

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 

Valor de campo

Comentarios

En la tabla siguiente se muestra el formato de ensamblado hexadecimal y del lenguaje intermedio de Microsoft (MSIL), junto con un breve resumen de referencia:

Formato Formato de ensamblado Descripción
FE 12 <unsigned int8> sin ligned. alignment Indica que la instrucción de puntero posterior puede no estar válida.

El comportamiento transitorio de la pila, en orden secuencial, es:

  1. Se inserta una dirección en la pila.

Unalignedespecifica que la dirección (un puntero no administrado, native int) de la pila podría no estar alineada con el tamaño natural de la instrucción , , ldfldstind, stfld, ldobj, stobj, initblko cpblk inmediatamente despuésldind. Es decir, para una Ldind_I4 instrucción, la alineación de la dirección puede no ser un límite de 4 bytes. Para initblk y cpblk la alineación predeterminada depende de la arquitectura (4 bytes en CPU de 32 bits, 8 bytes en CPU de 64 bits). Los generadores de código que no restringen su salida a un tamaño de palabra de 32 bits deben usar unaligned si la alineación no se conoce en tiempo de compilación para ser de 8 bytes.

El valor de alineación debe ser 1, 2 o 4 y significa que el código generado debe suponer que la dirección es byte, doble byte o cuatro bytes alineados, respectivamente. Tenga en cuenta que los punteros transitorios (tipo *) siempre están alineados.

Aunque la alineación de una cpblk instrucción requeriría lógicamente dos números (uno para el origen y otro para el destino), no hay ningún impacto notable en el rendimiento si solo se especifica el número inferior.

Los unaligned prefijos y volatile se pueden combinar en cualquier orden. Deben preceder inmediatamente a una ldindinstrucción , stind, ldfld, stobjstfldldobj, , , initblko cpblk . Solo se permite el Volatile prefijo para las Ldsfld instrucciones y Stsfld .

Las sobrecargas de método siguientes Emit pueden usar el unaligned código de operación:

Se aplica a