PackingSize 列舉

定義

指定兩個因數其中之一,在將類型封送處理時,該因數決定欄位的記憶體對齊。

此列舉支援其成員值的位元組合。

C#
public enum PackingSize
C#
[System.Flags]
[System.Serializable]
public enum PackingSize
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum PackingSize
繼承
PackingSize
屬性

欄位

名稱 Description
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 中計算的有效封裝大小倍數。

備註

一旦計算類別或結構中所有字段的位移之後,就會加入填補,讓整體大小是封裝大小的倍數。

例如,在包含 bytelong的類別中,使用封裝大小 Size1,欄位移 byte 為零 (0) ,而字段的 long 位移為一 (1) 。 如果封裝大小為 Size4,則 long 字段會位移四 (4) 。 在包含兩 short 個字段的類別中,使用任何封裝大小,第二 short 個字段的位移是兩個 (2) 。

備註

如果變更封裝大小會導致欄位在大小不是倍數的位移上對齊,則變更封裝大小可能會影響效能。

適用於

產品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0