OpCodes.Unaligned Campo
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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:
- Se inserta una dirección en la pila.
Unaligned
especifica 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 , , ldfld
stind
, stfld
, ldobj
, stobj
, initblk
o 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 ldind
instrucción , stind
, ldfld
, stobj
stfld
ldobj
, , , initblk
o 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: