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.