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
Атрибуты

Поля

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

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

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

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

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

Note

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

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

Note

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

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