Поделиться через


Массивы (RPC)

Некоторые категории массивов определены на основе их характеристик производительности, в первую очередь, можно ли скопировать массив.

Для некоторых категорий, таких как массив фиксированного размера, существуют два типа дескрипторов массива; они указываются в исправлении в имени ведущего маркера FC.

Формат символа Описание
SM Общий размер типа можно представить в 16-разрядной неназначенных int.
LG Общий размер типа должен быть представлен 32-разрядным без знака.

 

Поля, общие для массивов:

  • total_size

    Общий размер массива в памяти в байтах. Это то же самое, что и размер провода после выравнивания. Общий размер вычисляется для категорий, для которых проблема с заполнением не существует, а размер — фактический размер массива.

  • element_size

    Общий размер в памяти одного элемента массива, включая заполнение (это может произойти только для сложных массивов).

  • element_description

    Описание типа элемента массива.

  • pointer_layout

    Дополнительные сведения см. в разделе макета указателя.

Массивы фиксированного размера

Строка формата массива фиксированного размера создается для массивов с известным размером и поэтому может быть заблокирована в буфер маршалинга. Ниже приведены два формата дескриптора фиксированного массива.

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

и

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

Соответствующий массив

Соответствующий массив можно копировать после того, как размер массива известен.

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

Conformance_description<> представляет собой дескриптор корреляции и имеет 4 или 6 байт в зависимости от того, используется ли /надежный.

Соответствующий разнообразный массив

Также можно скопировать соответствующий разнообразный массив.

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

Conformance_description<> и variance_description<> — дескриптор корреляции и имеет 4 или 6 байт в зависимости от того, используется ли /надежный.

Различные массивы

Различные массивы имеют два варианта в зависимости от размера массива.

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

Variance_description<> является дескриптором корреляции и имеет 4 или 6 байт в зависимости от используемой /надежной.

Для различных массивов, внедренных в структуру, смещение<2> поля variance_description<> является относительным смещением от позиции разного массива в структуре к дисперсии, описывающей поле. Смещение обычно относительно начала структуры.

Сложные массивы

Сложный массив — это любой массив с элементом, который предотвращает его блочное копирование, и таким образом необходимо предпринять дополнительные действия. Эти элементы делают массив сложным:

  • простые типы: ENUM16, __INT3264 (только на 64-разрядных платформах), целочисленный с [диапазоном]
  • указатели ссылок и интерфейсов (все указатели на 64-разрядных платформах)
  • Союзов
  • сложные структуры (см. раздел "Описание сложной структуры" для полного списка причин, по которым структура должна быть сложной)
  • элементы, определенные с [transmit_as], [user_marshal]
  • Все многомерные массивы с по крайней мере одним соответствующим и(или) различным измерением являются сложными независимо от базового типа элемента.

Описание сложного массива выглядит следующим образом:

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

Поле number_of_elements<2> равно нулю, если массив соответствует требованиям.

Conformance_description<> и variance_description<> — дескриптор корреляции и имеет 4 или 6 байт в зависимости от того, используется ли /надежный. Если массив имеет соответствие и (или) дисперсию, conformance_description<> или variance_description<> поля имеют допустимые описания, в противном случае для первого 4 байта дескриптора корреляции задано значение 0xFFFFFFFF. Флаги, когда они присутствуют, равны нулю.