Массивы (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. Флаги, когда они присутствуют, равны нулю.