Matrizes (RPC)
Várias categorias de matriz foram definidas com base em suas características de desempenho, principalmente se a matriz pode ser copiada em bloco.
Para algumas categorias, como uma matriz de tamanho fixo, existem dois tipos de descritores de matriz; eles são indicados por uma correção no nome do token FC principal.
Caractere de formato | Descrição |
---|---|
SM | O tamanho total do tipo pode ser representado em um int sem sinal de 16 bits. |
LG | O tamanho total do tipo precisa de um longo sem sinal de 32 bits para ser representado. |
Campos comuns a matrizes:
total_size
Tamanho total da matriz na memória, em bytes. Isso é o mesmo que o tamanho do fio após o alinhamento. O tamanho total é calculado para categorias para as quais o problema de preenchimento não existe e o tamanho é o tamanho real da matriz.
element_size
Tamanho total na memória de um único elemento da matriz, incluindo o preenchimento (isso pode acontecer somente para matrizes complexas).
element_description
Descrição do tipo de elemento de matriz.
pointer_layout
Consulte o tópico Layout do Ponteiro para obter mais informações.
Uma cadeia de caracteres de formato de matriz de tamanho fixo é gerada para matrizes que têm um tamanho conhecido e, portanto, pode ser copiada em bloco para o buffer de marshaling. Os dois formatos de descritor de matriz fixa são os seguintes.
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
Uma matriz compatível pode ser copiada em bloco depois que o tamanho da matriz for conhecido.
FC_CARRAY alignment<1>
element_size<2>
conformance_description<>
[pointer_layout<>]
element_description<>
FC_END
O conformance_description<> é um descritor de correlação e tem 4 ou 6 bytes, dependendo se /robust é usado.
Uma matriz variável compatível também pode ser copiada em bloco.
FC_CVARRAY alignment<1>
element_size<2>
conformance_description<>
variance_description<>
[pointer_layout<>]
element_description<>
FC_END
O conformance_description<> e variance_description<> é um descritor de correlação e tem 4 ou 6 bytes, dependendo se /robust é usado.
As matrizes variáveis têm duas possibilidades dependendo do tamanho da 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
O variance_description<> é um descritor de correlação e tem 4 ou 6 bytes, dependendo do /robust sendo usado.
Para matrizes variáveis inseridas dentro de uma estrutura, o campo deslocamento<2> do variance_description<> é um deslocamento relativo da posição da matriz variável na estrutura para a variância que descreve o campo. O deslocamento normalmente é relativo ao início da estrutura.
Uma matriz complexa é qualquer matriz com um elemento que a impede de ser copiada em bloco e, como tal, ações adicionais precisam ser executadas. Esses elementos tornam uma matriz complexa:
- tipos simples: ENUM16, __INT3264 (somente em plataformas de 64 bits), um integral com [intervalo]
- ponteiros de referência e interface (todos os ponteiros em plataformas de 64 bits)
- uniões
- estruturas complexas (consulte o tópico Descrição da Estrutura Complexa para obter uma lista completa de motivos para uma estrutura ser complexa)
- elementos definidos com [transmit_as], [user_marshal]
- Todas as matrizes multidimensionais com pelo menos uma dimensão compatível e/ou variável são complexas, independentemente do tipo de elemento subjacente.
A descrição da matriz complexa é a seguinte:
FC_BOGUS_ARRAY alignment<1>
number_of_elements<2>
conformance_description<>
variance_description<>
element_description<>
FC_END
O campo number_of_elements<2> será zero se a matriz estiver em conformidade.
O conformance_description<> e variance_description<> é um descritor de correlação e tem 4 ou 6 bytes, dependendo se /robust é usado. Se a matriz tiver conformidade e/ou variação, os campos conformance_description<> e/ou variance_description<> têm descrições válidas, caso contrário, os primeiros 4 bytes do descritor de correlação serão definidos como 0xFFFFFFFF. Os sinalizadores, quando presentes, são definidos como zero.