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
- Наследование
- Атрибуты
Поля
Size1 | 1 | Упаковочный размер равен 1 байту. |
Size128 | 128 | Упаковочный размер равен 128 байтам. |
Size16 | 16 | Упаковочный размер равен 16 байтам. |
Size2 | 2 | Упаковочный размер равен 2 байтам. |
Size32 | 32 | Упаковочный размер равен 32 байтам. |
Size4 | 4 | Упаковочный размер равен 4 байтам. |
Size64 | 64 | Упаковочный размер равен 64 байтам. |
Size8 | 8 | Упаковочный размер равен 8 байтам. |
Unspecified | 0 | Упаковочный размер не задан. |
Комментарии
Размер упаковки влияет на выравнивание полей в структурах и классах, организация которых имеет значение LayoutKind.Sequential. Размер упаковки является одним из двух факторов, определяющих смещение поля при маршале структуры или класса; другим фактором является действующий размер поля. Чтобы определить смещение поля, выполните следующие действия:
Вычислить минимальное значение смещения, добавив размер предыдущего поля к смещению предыдущего поля.
Вычисление естественного размера упаковки для поля. Если поле является простым типом данных, используйте размер. Если поле является массивом, используйте размер элемента массива. Если поле само по себе является структурой, сравните размер упаковки этой структуры с размером самого большого поля в этой структуре и используйте меньшее из двух значений.
Вычислить эффективный размер упаковки, сравнив размер упаковки с естественным размером упаковки поля, вычисленным на шаге 2. Используйте меньшее из двух чисел.
Вычисление смещения. Смещение — это первое расположение памяти, которое равно или больше минимального значения, а также кратное размеру эффективной упаковки, вычисленной на шаге 3.
Примечание
После вычисления смещения для всех полей в классе или структуре добавляется заполнение, чтобы общий размер был кратен размеру упаковки.
Например, в классе, содержав byte
и long
, используя размер Size1
упаковки, смещение byte
поля равно нулю (0), а смещение long
поля — 1. Если размер упаковки равен Size4
, поле имеет смещение long
четыре (4). В классе, содержавом два short
поля с использованием любого размера упаковки, смещение второго short
поля равно двум (2).
Примечание
Изменение размера упаковки может повлиять на производительность, если приведет к выравниванию полей по смещениям, которые не кратны их размеру.