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.
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: