Matrices (RPC)
Se han definido varias categorías de matriz en función de sus características de rendimiento, principalmente si la matriz se puede copiar en bloque.
Para algunas categorías, como una matriz de tamaño fijo, existen dos tipos de descriptores de matriz; se indican mediante una corrección en el nombre del token de FC inicial.
Formato de carácter | Descripción |
---|---|
SM | El tamaño total del tipo se puede representar en un entero de 16 bits sin signo. |
LG | El tamaño total del tipo necesita representar un long sin signo de 32 bits. |
Campos comunes a matrices:
total_size
Tamaño total de la matriz en memoria, en bytes. Este es el mismo que el tamaño de cable después de la alineación. El tamaño total se calcula para las categorías para las que el problema de relleno no existe y el tamaño es el tamaño real de la matriz.
element_size
Tamaño total en memoria de un único elemento de la matriz, incluido el relleno (esto puede ocurrir solo para matrices complejas).
element_description
Descripción del tipo de elemento de matriz.
pointer_layout
Consulte el tema Diseño de puntero para obtener más información.
Se genera una cadena de formato de matriz de tamaño fijo para matrices que tienen un tamaño conocido y, por lo tanto, se pueden copiar en bloque en el búfer de serialización. Los dos formatos fijos de descriptores de matriz son los siguientes.
FC_SMFARRAY alignment<1>
total_size<2>
[pointer_layout<>]
element_description<>
FC_END
y
FC_LGFARRAY alignment<1>
total_size<4>
[pointer_layout<>]
element_description<>
FC_END
Una matriz conforme se puede copiar en bloque una vez que se conoce el tamaño de la matriz.
FC_CARRAY alignment<1>
element_size<2>
conformance_description<>
[pointer_layout<>]
element_description<>
FC_END
El conformance_description<> es un descriptor de correlación y tiene 4 o 6 bytes en función de si se usa /robust .
Una matriz variable compatible también se puede copiar en bloque.
FC_CVARRAY alignment<1>
element_size<2>
conformance_description<>
variance_description<>
[pointer_layout<>]
element_description<>
FC_END
El conformance_description<> y variance_description<> es un descriptor de correlación y tiene 4 o 6 bytes en función de si se usa /robust .
Las distintas matrices tienen dos posibilidades en función del tamaño de la matriz.
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
El variance_description<> es un descriptor de correlación y tiene 4 o 6 bytes en función del /robust que se use.
Para matrices variables incrustadas dentro de una estructura, el campo offset<2> del variance_description<> es un desplazamiento relativo de la posición de la matriz variable en la estructura para la varianza que describe el campo. El desplazamiento suele ser relativo al principio de la estructura.
Una matriz compleja es cualquier matriz con un elemento que impide que se copie en bloque y, como tal, es necesario realizar acciones adicionales. Estos elementos hacen que una matriz sea compleja:
- tipos simples: ENUM16, __INT3264 (solo en plataformas de 64 bits), un entero con [rango]
- punteros de referencia e interfaz (todos los punteros en plataformas de 64 bits)
- uniones
- estructuras complejas (consulte el tema Descripción de estructura compleja para obtener una lista completa de motivos para que una estructura sea compleja)
- elementos definidos con [transmit_as], [user_marshal]
- Todas las matrices multidimensionales con al menos una dimensión conforme o variable son complejas independientemente del tipo de elemento subyacente.
La descripción de la matriz compleja es la siguiente:
FC_BOGUS_ARRAY alignment<1>
number_of_elements<2>
conformance_description<>
variance_description<>
element_description<>
FC_END
El campo number_of_elements<2> es cero si la matriz es conforme.
El conformance_description<> y variance_description<> es un descriptor de correlación y tiene 4 o 6 bytes en función de si se usa /robust . Si la matriz tiene conformidad o varianza, los campos de conformance_description<> o variance_description<> tienen descripciones válidas; de lo contrario, los primeros 4 bytes del descriptor de correlación se establecen en 0xFFFFFFFF. Las marcas, cuando están presentes, se establecen en cero.