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


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
Наследование
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. Размер упаковки является одним из двух факторов, определяющих смещение поля при маршале структуры или класса; другим фактором является действующий размер поля. Чтобы определить смещение поля, выполните следующие действия:

  1. Вычислить минимальное значение смещения, добавив размер предыдущего поля к смещению предыдущего поля.

  2. Вычисление естественного размера упаковки для поля. Если поле является простым типом данных, используйте размер. Если поле является массивом, используйте размер элемента массива. Если поле само по себе является структурой, сравните размер упаковки этой структуры с размером самого большого поля в этой структуре и используйте меньшее из двух значений.

  3. Вычислить эффективный размер упаковки, сравнив размер упаковки с естественным размером упаковки поля, вычисленным на шаге 2. Используйте меньшее из двух чисел.

  4. Вычисление смещения. Смещение — это первое расположение памяти, которое равно или больше минимального значения, а также кратное размеру эффективной упаковки, вычисленной на шаге 3.

Примечание

После вычисления смещения для всех полей в классе или структуре добавляется заполнение, чтобы общий размер был кратен размеру упаковки.

Например, в классе, содержав byte и long, используя размер Size1упаковки, смещение byte поля равно нулю (0), а смещение long поля — 1. Если размер упаковки равен Size4, поле имеет смещение long четыре (4). В классе, содержавом два short поля с использованием любого размера упаковки, смещение второго short поля равно двум (2).

Примечание

Изменение размера упаковки может повлиять на производительность, если приведет к выравниванию полей по смещениям, которые не кратны их размеру.

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