OpCodes.Unaligned Campo
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Indica que um endereço atualmente sobre a pilha de avaliação pode não estar alinhado ao tamanho natural da instrução imediatamente após ldind
, stind
, ldfld
, stfld
, ldobj
, stobj
, initblk
ou cpblk
.
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 do campo
Comentários
A tabela a seguir lista o formato de assembly hexadecimal e MSIL (Microsoft Intermediate Language) da instrução, juntamente com um breve resumo de referência:
Formatar | Formato de assembly | Descrição |
---|---|---|
FE 12 <unsigned int8 > |
Unaligned. alignment |
Indica que a instrução de ponteiro subsequente pode estar desalinhada. |
O comportamento de transição da pilha, em ordem sequencial, é:
- Um endereço é enviado por push para a pilha.
Unaligned
especifica que o endereço (um ponteiro não gerenciado, native int
) na pilha pode não estar alinhado ao tamanho natural da instrução , , ldfld
stind
, stfld
, ldobj
, stobj
initblk
, ou cpblk
imediatamente a seguirldind
. Ou seja, para obter uma Ldind_I4 instrução, o alinhamento do endereço pode não ser para um limite de 4 bytes. Para initblk
e cpblk
o alinhamento padrão depende da arquitetura (4 bytes em CPUs de 32 bits, 8 bytes em CPUs de 64 bits). Os geradores de código que não restringem sua saída a um tamanho de palavra de 32 bits devem usar unaligned
se o alinhamento não for conhecido em tempo de compilação para ser de 8 bytes.
O valor de alinhamento deve ser 1, 2 ou 4 e significa que o código gerado deve assumir que o endereço é alinhado por byte, byte duplo ou quad-byte, respectivamente. Observe que ponteiros transitórios (tipo *
) são sempre alinhados.
Embora o alinhamento de uma cpblk
instrução exija logicamente dois números (um para a origem e outro para o destino), não haverá nenhum impacto perceptível no desempenho se apenas o número inferior for especificado.
Os unaligned
prefixos e volatile
podem ser combinados em qualquer ordem. Eles devem preceder imediatamente uma ldind
instrução , , ldfld
stind
, stfld
, ldobj
, stobj
, initblk
ou cpblk
. Somente o Volatile prefixo é permitido para as Ldsfld instruções e Stsfld .
As seguintes Emit sobrecargas de método podem usar o unaligned
opcode: