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 код операции:

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