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 。
对于嵌入结构内的不同数组,variance_description<>的偏移量<2> 字段是从结构中不同数组的位置到方差描述字段的相对偏移量。 偏移量通常相对于结构的开头。
复杂数组是包含阻止块复制它的元素的任何数组,因此需要执行其他操作。 这些元素使数组变得复杂:
- 简单类型:ENUM16,在 64 位平台上__INT3264 (仅) ,具有 [range] 的整数
- 引用指针和接口指针 (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。 标志(如果存在)设置为零。