Information
The topic you requested is included in another documentation set. For convenience, it's displayed below. Choose Switch to see the topic in its original location.
This topic has not yet been rated - Rate this topic

PackingSize Enumeration

Specifies one of two factors that determine the memory alignment of fields when a type is marshaled.

Namespace:  System.Reflection.Emit
Assembly:  mscorlib (in mscorlib.dll)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public enum PackingSize
Member nameDescription
UnspecifiedThe packing size is not specified.
Size1The packing size is 1 byte.
Size2The packing size is 2 bytes.
Size4The packing size is 4 bytes.
Size8The packing size is 8 bytes.
Size16The packing size is 16 bytes.
Size32The packing size is 32 bytes.
Size64The packing size is 64 bytes.
Size128The packing size is 128 bytes.

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. 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. 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.

NoteNote:

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.

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). If the packing size is Size4, the long field has offset four (4). In a class containing two short fields, using any packing size, the offset of the second short field is two (2).

NoteNote:

Changing the packing size can affect performance if it causes fields to be aligned on offsets that are not multiples of their size.

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0
Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback

Community Additions

Show:
© 2014 Microsoft. All rights reserved.