PackingSize PackingSize PackingSize PackingSize Enum

Определение

Задает один или два факторы, определяющие выравнивание полей в памяти при маршалинга типа.Specifies one of two factors that determine the memory alignment of fields when a type is marshaled.

Это перечисление имеет атрибут FlagsAttribute, который разрешает побитовое сочетание значений его элементов.

public enum class PackingSize
[System.Runtime.InteropServices.ComVisible(true)]
[System.Flags]
[System.Serializable]
public enum PackingSize
type PackingSize = 
Public Enum PackingSize
Наследование
Атрибуты

Поля

Size1 Size1 Size1 Size1 1

Упаковочный размер равен 1 байту.The packing size is 1 byte.

Size128 Size128 Size128 Size128 128

Упаковочный размер равен 128 байтам.The packing size is 128 bytes.

Size16 Size16 Size16 Size16 16

Упаковочный размер равен 16 байтам.The packing size is 16 bytes.

Size2 Size2 Size2 Size2 2

Упаковочный размер равен 2 байтам.The packing size is 2 bytes.

Size32 Size32 Size32 Size32 32

Упаковочный размер равен 32 байтам.The packing size is 32 bytes.

Size4 Size4 Size4 Size4 4

Упаковочный размер равен 4 байтам.The packing size is 4 bytes.

Size64 Size64 Size64 Size64 64

Упаковочный размер равен 64 байтам.The packing size is 64 bytes.

Size8 Size8 Size8 Size8 8

Упаковочный размер равен 8 байтам.The packing size is 8 bytes.

Unspecified Unspecified Unspecified Unspecified 0

Упаковочный размер не задан.The packing size is not specified.

Комментарии

Размер упаковки влияет на выравнивание полей в структурах и классах, чья LayoutKind.Sequentialорганизация имеет значение.Packing size affects the alignment of fields in structures and classes whose organization is LayoutKind.Sequential. Размер упаковки — это один из двух факторов, определяющий смещение поля при маршалировании структуры или класса. другой фактор — это эффективный размер поля.The packing size is one of two factors that determine the offset of a field when the structure or class is marshaled; the other factor is the effective size of the field. Чтобы определить смещение поля, сделайте следующее:To determine the offset of a field:

  1. Вычисляет минимальное значение смещения, добавляя размер предыдущего поля к смещению предыдущего поля.Compute the minimum value for the offset by adding the size of the preceding field to the offset of the preceding field.

  2. Вычисление естественного размера упаковки для поля: Если поле имеет простой тип данных, используйте размер.Compute the natural packing size for the field: If the field is a simple data type, use the size. Если поле является массивом, используйте размер элемента массива.If the field is an array, use the size of an array element. Если поле само по себе является структурой, Сравните размер упаковки этой структуры с размером самого большого поля в этой структуре и используйте меньшее из двух значений.If the field is itself a structure, compare the packing size of that structure to the size of the largest field in that structure, and use the smaller of the two values.

  3. Вычислите эффективный размер упаковки, сравнив размер упаковки с естественным размером упаковки поля, вычисленным на шаге 2.Compute the effective packing size by comparing the packing size to the natural packing size of the field, computed in step 2. Используйте меньшее из двух чисел.Use the smaller of the two numbers.

  4. Вычисление смещения.Compute the offset. Смещение — это первое место в памяти, которое больше минимального или больше минимума, и кратное допустимому размеру упаковки, вычисленному на шаге 3.The offset is the first memory location that is equal to or larger than the minimum, and a multiple of the effective packing size computed in step 3.

Примечание

После расчета смещений для всех полей в классе или структуре добавляется заполнение, чтобы общий размер был кратным размеру упаковки.Once offsets have been computed for all the fields in the class or structure, padding is added so that the overall size is a multiple of the packing size.

Например, в классе byte , содержащем longи, с использованием упаковочного размера Size1, смещение byte long поля равно нулю (0), а смещение поля равно единице (1).For example, in a class containing a byte and a long, using packing size Size1, the offset of the byte field is zero (0) and the offset of the long field is one (1). Если упаковочный размер равен Size4 long , поле имеет смещение четыре (4).If the packing size is Size4, the long field has offset four (4). В классе, содержащем два short поля с использованием любого размера упаковки, смещение второго short поля равно двум (2).In a class containing two short fields, using any packing size, the offset of the second short field is two (2).

Примечание

Изменение упаковочного размера может повлиять на производительность, если в этом случае поля будут выражаться по смещениям, не кратным их размеру.Changing the packing size can affect performance if it causes fields to be aligned on offsets that are not multiples of their size.

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