Partilhar via


OpCodes.Unaligned Campo

Definição

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, é:

  1. Um endereço é enviado por push para a pilha.

Unalignedespecifica que o endereço (um ponteiro não gerenciado, native int) na pilha pode não estar alinhado ao tamanho natural da instrução , , ldfldstind, stfld, ldobj, stobjinitblk, 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 ldindinstrução , , ldfldstind, stfld, ldobj, stobj, initblkou 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:

Aplica-se a