Массивы (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 байт в зависимости от того, используется ли параметр /robust .
Соответствующий изменяющийся массив
Соответствующий изменяющийся массив также можно блочное копирование.
FC_CVARRAY alignment<1>
element_size<2>
conformance_description<>
variance_description<>
[pointer_layout<>]
element_description<>
FC_END
Conformance_description<> и variance_description<> являются дескриптором корреляции и имеют 4 или 6 байт в зависимости от того, используется ли параметр /robust .
Изменяющиеся массивы
Различные массивы имеют две возможности в зависимости от размера массива.
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 байт в зависимости от используемого параметра /robust .
Для различных массивов, внедренных в структуру, поле смещения<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 байт в зависимости от того, используется ли параметр /robust . Если массив имеет соответствие и(или) дисперсию, то поля conformance_description<> и(или) variance_description<> имеют допустимые описания, в противном случае первые 4 байта дескриптора корреляции задаются как 0xFFFFFFFF. Флаги, если они присутствуют, устанавливаются в нулевое значение.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по