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 |
Указывает, что последующие инструкции указателя могут быть несровненными. |
Переходный режим стека в последовательном порядке:
- Адрес помещается в стек.
Unaligned
указывает, что адрес (неуправляемый указатель, native int
) в стеке может быть не выровнен по естественному размеру инструкции ldind
, stind
, ldfld
, stobj
initblk
stfld
ldobj
или .cpblk
То есть для Ldind_I4 инструкции выравнивание адреса может быть не по 4-байтовой границе. Для initblk
и cpblk
выравнивание по умолчанию зависит от архитектуры (4 байт на 32-разрядных ЦП, 8 байт на 64-разрядных ЦП). Генераторы кода, которые не ограничивают свои выходные данные размером 32-разрядного слова, должны использовать unaligned
, если выравнивание не известно во время компиляции как 8-байтовое.
Значение выравнивания должно быть равно 1, 2 или 4 и означает, что созданный код должен предполагать, что адрес выровнен байтов, двухбайтов или четырехбайтов соответственно. Обратите внимание, что временные указатели (тип *
) всегда выравниваются.
Хотя выравнивание инструкции cpblk
логически требует двух чисел (одно для источника и одно для назначения), это не оказывает заметного влияния на производительность, если указано только меньшее число.
Префиксы unaligned
и volatile
можно объединять в любом порядке. Они должны непосредственно предшествовать ldind
инструкциям , stind
, stfld
ldfld
, ldobj
, stobj
, initblk
, или cpblk
. Для инструкций Volatile и Stsfld разрешен Ldsfld только префикс.
Emit Следующие перегрузки методов могут использовать unaligned
код операции: