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é en bloc.

Pour certaines catégories, telles qu’un tableau de taille fixe, deux types de descripteurs de tableau existent ; ils sont indiqués par un correctif 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 non signée 32 bits 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 qu’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 dont la taille est connue, et peut donc être copiée en 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é en 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 /robuste est utilisé.

Tableau variable conforme

Un tableau variable conforme peut également être copié en bloc.

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

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

Tableau variable

Les tableaux variables 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 en fonction du /robuste utilisé.

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

Tableaux complexes

Un tableau complexe est n’importe quel tableau avec un élément qui l’empêche d’être copié en 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égralement avec [plage]
  • référence et pointeurs d’interface (tous les pointeurs sur les plateformes 64 bits)
  • Syndicats
  • structures complexes (consultez la rubrique Description de structure complexe pour obtenir une liste complète des raisons pour lesquelles une structure doit être 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 de 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 variance_description<> est un descripteur de corrélation et a 4 ou 6 octets selon que /robuste est utilisé. Si le tableau a une conformité et/ou une variance, les champs conformance_description<> et/ou variance_description<> 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.