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。 标志(如果存在)设置为零。