PackingSize Wyliczenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Określa jeden z dwóch czynników, które określają wyrównanie pamięci pól, gdy typ jest marshalowany.
To wyliczenie obsługuje bitową kombinację jego wartości składowych.
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
- Dziedziczenie
- Atrybuty
Pola
Size1 | 1 | Rozmiar pakowania to 1 bajt. |
Size128 | 128 | Rozmiar pakowania wynosi 128 bajtów. |
Size16 | 16 | Rozmiar pakowania wynosi 16 bajtów. |
Size2 | 2 | Rozmiar pakowania wynosi 2 bajty. |
Size32 | 32 | Rozmiar pakowania wynosi 32 bajty. |
Size4 | 4 | Rozmiar pakowania wynosi 4 bajty. |
Size64 | 64 | Rozmiar pakowania wynosi 64 bajty. |
Size8 | 8 | Rozmiar pakowania wynosi 8 bajtów. |
Unspecified | 0 | Nie określono rozmiaru pakowania. |
Uwagi
Rozmiar pakowania wpływa na wyrównanie pól w strukturach i klasach, których organizacja to LayoutKind.Sequential. Rozmiar pakowania jest jednym z dwóch czynników, które określają przesunięcie pola, gdy struktura lub klasa jest marshalowana; drugi czynnik jest efektywnym rozmiarem pola. Aby określić przesunięcie pola:
Oblicz minimalną wartość przesunięcia, dodając rozmiar poprzedniego pola do przesunięcia poprzedniego pola.
Oblicz naturalny rozmiar pakowania dla pola: jeśli pole jest prostym typem danych, użyj rozmiaru. Jeśli pole jest tablicą, użyj rozmiaru elementu tablicy. Jeśli pole jest strukturą, porównaj rozmiar pakowania tej struktury z rozmiarem największego pola w tej strukturze i użyj mniejszych z tych dwóch wartości.
Oblicz efektywny rozmiar pakowania, porównując rozmiar pakowania do naturalnego rozmiaru pakowania pola obliczonego w kroku 2. Użyj mniejszej z dwóch liczb.
Oblicz przesunięcie. Przesunięcie jest pierwszą lokalizacją pamięci, która jest równa lub większa niż minimalna, oraz wielokrotność efektywnego rozmiaru pakowania obliczonego w kroku 3.
Uwaga
Po obliczeniu przesunięcia dla wszystkich pól w klasie lub strukturze dopełnienie jest dodawane tak, aby ogólny rozmiar był wielokrotnym rozmiarem pakowania.
Na przykład w klasie zawierającej element byte
i long
, używając rozmiaru Size1
pakowania, przesunięcie pola wynosi zero (0), a przesunięcie byte
long
pola to jedno (1). Jeśli rozmiar pakowania to Size4
, long
pole ma przesunięcie cztery (4). W klasie zawierającej dwa short
pola przy użyciu dowolnego rozmiaru pakowania przesunięcie drugiego short
pola wynosi dwa (2).
Uwaga
Zmiana rozmiaru pakowania może mieć wpływ na wydajność, jeśli powoduje wyrównanie pól do przesunięć, które nie mają wielokrotności ich rozmiaru.
Dotyczy
Opinia
https://aka.ms/ContentUserFeedback.
Już wkrótce: w ciągu 2024 r. będziemy stopniowo usuwać problemy z usługą GitHub jako mechanizm opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla