Partager via


Tableaux (RPC)

Plusieurs catégories de tableaux ont été définies en fonction de leurs caractéristiques de performances, principalement si le tableau peut être copié par bloc.

Pour certaines catégories, telles qu’un tableau de taille fixe, il existe deux types de descripteurs de tableau : ils sont indiqués par un in-fix dans le nom du jeton FC de début.

Caractère de mise en forme Description
SM La taille totale du type peut être représentée dans un int non signé 16 bits.
LG La taille totale du type a besoin d’une longueur 32 bits non signée pour être représentée.

 

Champs communs aux tableaux :

  • total_size

    Taille totale du tableau en mémoire, en octets. Il s’agit de la même taille de fil après l’alignement. La taille totale est calculée pour les catégories pour lesquelles le problème de remplissage n’existe pas et la taille est la taille réelle du tableau.

  • element_size

    Taille totale en mémoire d’un seul élément du tableau, y compris le remplissage (cela peut se produire uniquement pour les tableaux complexes).

  • element_description

    Description du type d’élément de tableau.

  • pointer_layout

    Pour plus d’informations, consultez la rubrique Disposition du pointeur .

Tableaux de taille fixe

Une chaîne de format de tableau de taille fixe est générée pour les tableaux qui ont une taille connue et qui peuvent donc être copiées par bloc dans la mémoire tampon de marshaling. Les deux formats de descripteur de tableau fixe sont les suivants.

FC_SMFARRAY alignment<1> 
total_size<2> 
[pointer_layout<>]  
element_description<> 
FC_END

et

FC_LGFARRAY alignment<1> 
total_size<4> 
[pointer_layout<>] 
element_description<> 
FC_END

Tableau conforme

Un tableau conforme peut être copié par bloc une fois que la taille du tableau est connue.

FC_CARRAY alignment<1>
element_size<2> 
conformance_description<> 
[pointer_layout<>] 
element_description<> 
FC_END

Le conformance_description<> est un descripteur de corrélation et a 4 ou 6 octets selon que /robust est utilisé ou non.

Tableau variable conforme

Un tableau variable conforme peut également être copié par blocs.

FC_CVARRAY alignment<1> 
element_size<2> 
conformance_description<> 
variance_description<>  
[pointer_layout<>] 
element_description<> 
FC_END

Le conformance_description<> et le variance_description<> est un descripteur de corrélation qui a 4 ou 6 octets selon que /robust est utilisé ou non.

Tableau variable

Les différents tableaux ont deux possibilités en fonction de la taille du tableau.

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

Le variance_description<> est un descripteur de corrélation et a 4 ou 6 octets selon le /robust utilisé.

Pour différents tableaux incorporés à l’intérieur d’une structure, le champ offset<2> du variance_description<> est un décalage relatif entre la position variable du tableau dans la structure et le champ décrivant la variance. Le décalage est généralement relatif au début de la structure.

Tableaux complexes

Un tableau complexe est un tableau avec un élément qui l’empêche d’être copié par bloc et, par conséquent, une action supplémentaire doit être effectuée. Ces éléments rendent un tableau complexe :

  • types simples : ENUM16, __INT3264 (sur les plateformes 64 bits uniquement), intégrale avec [plage]
  • pointeurs de référence et d’interface (tous les pointeurs sur les plateformes 64 bits)
  • unions
  • structures complexes (voir la rubrique Description de structure complexe pour obtenir la liste complète des raisons pour lesquelles une structure est complexe)
  • éléments définis avec [transmit_as], [user_marshal]
  • Tous les tableaux multidimensionnels avec au moins une dimension conforme et/ou variable sont complexes, quel que soit le type d’élément sous-jacent.

La description du tableau complexe est la suivante :

FC_BOGUS_ARRAY alignment<1> 
number_of_elements<2> 
conformance_description<> 
variance_description<> 
element_description<> 
FC_END

Le champ number_of_elements<2> est égal à zéro si le tableau est conforme.

Le conformance_description<> et le variance_description<> est un descripteur de corrélation qui a 4 ou 6 octets selon que /robust est utilisé ou non. Si le tableau a une conformité et/ou une variance, les conformance_description<> et/ou variance_description<> champs ont des descriptions valides, sinon les 4 premiers octets du descripteur de corrélation sont définis sur 0xFFFFFFFF. Les indicateurs, lorsqu’ils sont présents, sont définis sur zéro.