Compartir a través de


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 fc inicial.

Formato de carácter Descripción
SM El tamaño total del tipo se puede representar en un int sin signo de 16 bits.
LG El tamaño total del tipo necesita que se represente un long de 32 bits sin signo.

 

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 solo 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.

Matrices de tamaño fijo

Se genera una cadena de formato de matriz de tamaño fijo para matrices que tienen un tamaño conocido y, por tanto, se pueden copiar en bloque en el búfer de serialización. Los dos formatos fijos del descriptor 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

Matriz conforme

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.

Matriz variable conforme

Una matriz variable conforme 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.

Matriz variable

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 usa.

Para las distintas matrices incrustadas dentro de una estructura, el desplazamiento<2> campo de la variance_description<> es un desplazamiento relativo de la posición de la matriz variable en la estructura hasta la varianza que describe el campo. El desplazamiento suele ser relativo al principio de la estructura.

Matrices complejas

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 [intervalo]
  • punteros de referencia e interfaz (todos los punteros en plataformas de 64 bits)
  • uniones
  • estructuras complejas (consulte el tema Descripción de la estructura compleja para obtener una lista completa de razones 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.