Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.