PackingSize Перечисление
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает один из двух факторов, определяющих выравнивание памяти полей при маршалинге типа.
Это перечисление поддерживает побитовую комбинацию значений его членов.
public enum class PackingSize
public enum PackingSize
[System.Flags]
[System.Serializable]
public enum PackingSize
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum PackingSize
type PackingSize =
[<System.Flags>]
[<System.Serializable>]
type PackingSize =
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type PackingSize =
Public Enum PackingSize
- Наследование
- Атрибуты
Поля
| Имя | Значение | Описание |
|---|---|---|
| Unspecified | 0 | Размер упаковки не указан. |
| Size1 | 1 | Размер упаковки составляет 1 байт. |
| Size2 | 2 | Размер упаковки составляет 2 байта. |
| Size4 | 4 | Размер упаковки составляет 4 байта. |
| Size8 | 8 | Размер упаковки составляет 8 байт. |
| Size16 | 16 | Размер упаковки составляет 16 байт. |
| Size32 | 32 | Размер упаковки составляет 32 байта. |
| Size64 | 64 | Размер упаковки составляет 64 байта. |
| Size128 | 128 | Размер упаковки составляет 128 байт. |
Комментарии
Размер упаковки влияет на выравнивание полей в структурах и классах, организация которых является LayoutKind.Sequential. Размер упаковки является одним из двух факторов, определяющих смещение поля при маршалинге структуры или класса; другим фактором является действующий размер поля. Чтобы определить смещение поля, выполните следующие действия.
Вычислить минимальное значение смещения, добавив размер предыдущего поля в смещение предыдущего поля.
Вычислить размер естественной упаковки для поля: если поле является простым типом данных, используйте размер. Если поле является массивом, используйте размер элемента массива. Если поле само по себе является структурой, сравните размер упаковки этой структуры с размером крупнейшего поля в этой структуре и используйте меньшее из двух значений.
Вычислить эффективный размер упаковки, сравнивая размер упаковки с естественным размером упаковки поля, вычисляемого на шаге 2. Используйте меньшее из двух чисел.
Вычислить смещение. Смещение — это первое расположение памяти, которое равно или больше минимального размера, а также несколько эффективных размеров упаковки, вычисляемых на шаге 3.
Note
После вычисления смещения для всех полей класса или структуры добавляется заполнение, чтобы общий размер был кратным.
Например, в классе, содержащий и bytelongразмер Size1упаковки, смещение поля равно нулю (0), а смещение bytelong поля равно одному (1). Если размер упаковки равен Size4, long поле имеет смещение четыре (4). В классе с двумя полями, использующими любой размер упаковки, смещение второго shortshort поля составляет два (2).
Note
Изменение размера упаковки может повлиять на производительность, если поля будут выровнены по смещениям, не кратным их размеру.