Поделиться через


OpCodes.Unaligned Поле

Определение

Указывает, что адрес на вершине стека, возможно, не выровнен по естественному размеру следующей непосредственно за ним инструкции ldind, stind, ldfld, stfld, ldobj, stobj, initblk или 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 

Значение поля

Комментарии

В следующей таблице приведен шестнадцатеричный формат инструкции и формат сборки msil, а также краткий обзор:

Формат Формат сборки Описание
FE 12 <unsigned int8> не выровнен. alignment Указывает, что последующие инструкции указателя могут быть несровненными.

Переходный режим стека в последовательном порядке:

  1. Адрес помещается в стек.

Unalignedуказывает, что адрес (неуправляемый указатель, native int) в стеке может быть не выровнен по естественному размеру инструкции ldind, stind, ldfld, stobjinitblkstfldldobjили .cpblk То есть для Ldind_I4 инструкции выравнивание адреса может быть не по 4-байтовой границе. Для initblk и cpblk выравнивание по умолчанию зависит от архитектуры (4 байт на 32-разрядных ЦП, 8 байт на 64-разрядных ЦП). Генераторы кода, которые не ограничивают свои выходные данные размером 32-разрядного слова, должны использовать unaligned , если выравнивание не известно во время компиляции как 8-байтовое.

Значение выравнивания должно быть равно 1, 2 или 4 и означает, что созданный код должен предполагать, что адрес выровнен байтов, двухбайтов или четырехбайтов соответственно. Обратите внимание, что временные указатели (тип *) всегда выравниваются.

Хотя выравнивание инструкции cpblk логически требует двух чисел (одно для источника и одно для назначения), это не оказывает заметного влияния на производительность, если указано только меньшее число.

Префиксы unaligned и volatile можно объединять в любом порядке. Они должны непосредственно предшествовать ldindинструкциям , stind, stfldldfld, ldobj, stobj, initblk, или cpblk . Для инструкций Volatile и Stsfld разрешен Ldsfld только префикс.

Emit Следующие перегрузки методов могут использовать unaligned код операции:

Применяется к