PackingSize 列舉
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
指定兩個因數其中之一,在將類型封送處理時,該因數決定欄位的記憶體對齊。
此列舉支援其成員值的位元組合。
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
- 繼承
- 屬性
欄位
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的結構和類別中的欄位對齊方式。 封裝大小是兩個因素之一,決定結構或類別封送處理時字段的位移;另一個因素是欄位的有效大小。 若要判斷欄位移:
將上一個字段的大小新增至前一個字段的位移,以計算位移的最小值。
計算欄位的自然封裝大小:如果欄位是簡單的資料類型,請使用大小。 如果欄位是陣列,請使用數位元素的大小。 如果欄位本身是結構,請將該結構的封裝大小與該結構中最大字段的大小進行比較,並使用兩個值的較小。
藉由比較封裝大小與步驟 2 中計算的欄位自然封裝大小,來計算有效的封裝大小。 使用兩個數位的較小值。
計算位移。 位移是第一個等於或大於最小值的記憶體位置,以及步驟 3 中計算的有效封裝大小倍數。
注意
一旦計算類別或結構中所有字段的位移之後,就會加入填補,讓整體大小是封裝大小的倍數。
例如,在包含 byte
和 long
的類別中,使用封裝大小 Size1
,欄位移 byte
為零 (0) ,而字段的 long
位移為一 (1) 。 如果封裝大小為 Size4
,則 long
字段會位移四 (4) 。 在包含兩 short
個字段的類別中,使用任何封裝大小,第二 short
個字段的位移是兩個 (2) 。
注意
如果變更封裝大小會導致欄位在大小不是倍數的位移上對齊,則變更封裝大小可能會影響效能。