Condividi tramite


Matrici (RPC)

Sono state definite diverse categorie di matrici in base alle relative caratteristiche di prestazioni, principalmente se la matrice può essere copiata in blocchi.

Per alcune categorie, ad esempio una matrice a dimensione fissa, esistono due tipi di descrittori di matrice; sono indicati da una correzione nel nome del token fc iniziale.

Formato carattere Descrizione
SM Le dimensioni totali del tipo possono essere rappresentate in un int senza segno a 16 bit.
LG La dimensione totale del tipo richiede una lunghezza senza segno a 32 bit da rappresentare.

 

Campi comuni alle matrici:

  • total_size

    Dimensioni totali della matrice in memoria, in byte. Questo è lo stesso della dimensione del filo dopo l'allineamento. La dimensione totale viene calcolata per le categorie per le quali il problema di riempimento non esiste e le dimensioni sono le dimensioni effettive della matrice.

  • element_size

    Dimensioni totali in memoria di un singolo elemento della matrice, inclusa la spaziatura interna (questa operazione può verificarsi solo per matrici complesse).

  • element_description

    Descrizione del tipo di elemento della matrice.

  • pointer_layout

    Per altre informazioni, vedere l'argomento Layout puntatore.

Matrici a dimensione fissa

Viene generata una stringa di formato di matrice a dimensione fissa per le matrici con dimensioni note e pertanto può essere copiata nel buffer di marshalling. I due formati di descrittore di matrice fissa sono i seguenti.

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

e

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

Matrice conforme

Una matrice conforme può essere copiata in blocchi dopo che la dimensione della matrice è nota.

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

Il conformance_description<> è un descrittore di correlazione e ha 4 o 6 byte a seconda che venga usato /robust.

Matrice variabile conforme

È anche possibile copiare una matrice variabile conforme.

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

Il conformance_description<> e variance_description<> è un descrittore di correlazione e ha 4 o 6 byte a seconda che venga usato /robust.

Matrice variabile

Le matrici variabili hanno due possibilità a seconda delle dimensioni della matrice.

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

Il variance_description<> è un descrittore di correlazione e ha 4 o 6 byte a seconda del /robust in uso.

Per le matrici variabili incorporate all'interno di una struttura, l'offset<2> campo del variance_description<> è un offset relativo dalla posizione della matrice variabile nella struttura al campo di descrizione della varianza. L'offset è in genere relativo all'inizio della struttura.

Matrici complesse

Una matrice complessa è qualsiasi matrice con un elemento che ne impedisce la copia a blocchi e, di conseguenza, deve essere eseguita un'azione aggiuntiva. Questi elementi rendono complessa una matrice:

  • tipi semplici: ENUM16, __INT3264 (solo su piattaforme a 64 bit), un integrale con [ intervallo]
  • puntatori di riferimento e interfaccia (tutti i puntatori su piattaforme a 64 bit)
  • Sindacati
  • strutture complesse (vedere l'argomento Descrizione struttura complessa per un elenco completo dei motivi per cui una struttura deve essere complessa)
  • elementi definiti con [transmit_as], [user_marshal]
  • Tutte le matrici multidimensionali con almeno una dimensione conforme e/o variabile sono complesse indipendentemente dal tipo di elemento sottostante.

La descrizione della matrice complessa è la seguente:

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

Il campo number_of_elements<2> è zero se la matrice è conforme.

Il conformance_description<> e variance_description<> è un descrittore di correlazione e ha 4 o 6 byte a seconda che venga usato /robust. Se la matrice ha conformità e/o varianza, i campi conformance_description<> e/o variance_description<> hanno descrizioni valide; in caso contrario, i primi 4 byte del descrittore di correlazione vengono impostati su 0xFFFFFFFF. I flag, se presenti, vengono impostati su zero.