Udostępnij za pośrednictwem


Tablice (RPC)

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.