Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zdefiniowano kilka kategorii tablicy na podstawie ich cech wydajności, przede wszystkim tego, czy tablica może być kopiowana blokowo.
W przypadku niektórych kategorii, takich jak tablica o stałym rozmiarze, istnieją dwa typy deskryptorów tablicy; są one wskazywane przez poprawkę w nazwie wiodącego tokenu fc.
| Formatuj znak | Opis |
|---|---|
| SM | Całkowity rozmiar typu może być reprezentowany w 16-bitowym niepodpisanym int. |
| LG | Całkowity rozmiar typu wymaga reprezentowania 32-bitowej długości bez znaku. |
Pola wspólne dla tablic:
total_size
Całkowity rozmiar tablicy w pamięci w bajtach. Jest to takie samo, jak rozmiar przewodu po wyrównaniu. Całkowity rozmiar jest obliczany dla kategorii, dla których problem z wypełnieniem nie istnieje, a rozmiar jest rzeczywisty rozmiar tablicy.
element_size
Całkowity rozmiar pamięci pojedynczego elementu tablicy, w tym wypełnienie (może się to zdarzyć tylko w przypadku złożonych tablic).
element_description
Opis typu elementu tablicy.
pointer_layout
Aby uzyskać więcej informacji, zobacz temat Układ wskaźnika.
Tablice o stałym rozmiarze
Ciąg formatu tablicy o stałym rozmiarze jest generowany dla tablic o znanym rozmiarze i dlatego może być kopiowany blokowo do buforu marshalingu. Dwa stałe formaty deskryptora tablicy są następujące.
FC_SMFARRAY alignment<1>
total_size<2>
[pointer_layout<>]
element_description<>
FC_END
i
FC_LGFARRAY alignment<1>
total_size<4>
[pointer_layout<>]
element_description<>
FC_END
Zgodna tablica
Zgodna tablica może być kopiowana blokowo, gdy jest znany rozmiar tablicy.
FC_CARRAY alignment<1>
element_size<2>
conformance_description<>
[pointer_layout<>]
element_description<>
FC_END
Conformance_description<> jest deskryptorem korelacji i ma 4 lub 6 bajtów w zależności od tego, czy /robust jest używany.
Zgodna tablica
Zgodna tablica może być również kopiowana blokowo.
FC_CVARRAY alignment<1>
element_size<2>
conformance_description<>
variance_description<>
[pointer_layout<>]
element_description<>
FC_END
Conformance_description<> i variance_description<> to deskryptor korelacji i ma 4 lub 6 bajtów w zależności od tego, czy jest używana /niezawodna.
Różna tablica
Różne tablice mają dwie możliwości w zależności od rozmiaru tablicy.
FC_SMVARRAY alignment<1>
total_size<2>
number_elements<2>
element_size<2>
variance_description<>
[pointer_layout<>]
element_description<>
FC_END
FC_LGVARRAY alignment<1>
total_size<4>
number_elements<4>
element_size<2>
variance_description<4>
[pointer_layout<>]
element_description<>
FC_END
Variance_description<> jest deskryptorem korelacji i ma 4 lub 6 bajtów w zależności od używanego /robust.
W przypadku różnych tablic osadzonych wewnątrz struktury przesunięcie<2> pola variance_description<> jest względnym przesunięciem od położenia zmiennej tablicy w strukturze do wariancji opisującej pole. Przesunięcie jest zwykle względem początku struktury.
Tablice złożone
Tablica zespolona to dowolna tablica z elementem, który uniemożliwia kopiowanie bloków, a w związku z tym należy podjąć dodatkowe działania. Te elementy sprawiają, że tablica jest złożona:
- proste typy: ENUM16, __INT3264 (tylko na platformach 64-bitowych), całkowita część z zakresem []
- wskaźniki referencyjne i interfejsu (wszystkie wskaźniki na platformach 64-bitowych)
- Związków
- złożone struktury (zobacz temat Opis struktury złożonej, aby uzyskać pełną listę przyczyn, dla których struktura ma być złożona)
- elementy zdefiniowane za pomocą [transmit_as], [user_marshal]
- Wszystkie tablice wielowymiarowe z co najmniej jednym zgodnym i/lub różnym wymiarem są złożone niezależnie od typu podstawowego elementu.
Opis tablicy złożonej wygląda następująco:
FC_BOGUS_ARRAY alignment<1>
number_of_elements<2>
conformance_description<>
variance_description<>
element_description<>
FC_END
Pole number_of_elements<2> ma wartość zero, jeśli tablica jest zgodna.
Conformance_description<> i variance_description<> to deskryptor korelacji i ma 4 lub 6 bajtów w zależności od tego, czy jest używana /niezawodna. Jeśli tablica ma zgodność i/lub wariancję, conformance_description<> i/lub variance_description<> pola mają prawidłowe opisy, w przeciwnym razie pierwsze 4 bajty deskryptora korelacji są ustawione na 0xFFFFFFFF. Flagi, gdy są obecne, są ustawione na zero.