配列 (RPC)

いくつかの配列カテゴリは、主に配列をブロックコピーできるかどうかというパフォーマンス特性に基づいて定義されています。

固定サイズの配列など、一部のカテゴリには、2 種類の配列記述子が存在します。これらは、先頭の FC トークンの名前の修正プログラムによって示されます。

文字の書式設定 説明
SM 型の合計サイズは、16 ビット符号なし int で表すことができます。
LG 型の合計サイズを表すには、32 ビット符号なし long が必要です。

 

配列に共通するフィールド:

  • total_size

    メモリ内の配列の合計サイズ (バイト単位)。 これは、位置合わせ後のワイヤ サイズと同じです。 合計サイズは、パディングの問題が存在せず、サイズが実際の配列サイズであるカテゴリに対して計算されます。

  • element_size

    埋め込みを含む、配列の 1 つの要素のメモリ内の合計サイズ (これは複雑な配列でのみ発生する可能性があります)。

  • element_description

    配列要素型の説明。

  • pointer_layout

    詳細については、「 ポインター レイアウト 」トピックを参照してください。

固定サイズの配列

固定サイズの配列書式指定文字列は、既知のサイズの配列に対して生成されるため、マーシャリング バッファーにブロック コピーできます。 2 つの固定配列記述子形式は次のとおりです。

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<> は相関記述子であり、 /robust が使用されているかどうかに応じて 4 バイトまたは 6 バイトです。

準拠する可変配列

準拠する可変配列は、ブロックコピーすることもできます。

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

conformance_description<> とvariance_description<> は相関記述子であり、 /robust が使用されているかどうかに応じて 4 バイトまたは 6 バイトです。

配列の変化

さまざまな配列には、配列のサイズに応じて 2 つの可能性があります。

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<> は相関記述子であり、使用されている /robust に応じて 4 バイトまたは 6 バイトです。

構造体の内部に埋め込まれた可変配列の場合、variance_description<>のオフセット<2> フィールドは、構造体内の変化する配列の位置から分散記述フィールドへの相対オフセットです。 通常、オフセットは構造体の先頭を基準にしています。

複合配列

複合配列は、ブロックコピーを妨げる要素を持つ任意の配列であり、追加のアクションを実行する必要があります。 これらの要素は、配列を複雑にします。

  • 単純型: ENUM16、__INT3264 (64 ビット プラットフォームの場合のみ)、整数と [範囲]
  • 参照ポインターとインターフェイス ポインター (64 ビット プラットフォーム上のすべてのポインター)
  • 共用体
  • 複雑な構造 (構造が複雑になる理由の完全な一覧については、「複雑な構造の説明」トピックを参照してください)
  • [transmit_as]、 [user_marshal] で定義された要素
  • 少なくとも 1 つの適合する次元または異なる次元を持つ多次元配列はすべて、基になる要素型に関係なく複雑です。

複雑な配列の説明は次のとおりです。

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

配列が準拠している場合、number_of_elements<2> フィールドは 0 です。

conformance_description<> とvariance_description<> は相関記述子であり、 /robust が使用されているかどうかに応じて 4 バイトまたは 6 バイトです。 配列に準拠や分散がある場合、conformance_description<> フィールドまたはvariance_description<> フィールドには有効な説明が含まれます。それ以外の場合は、関連付け記述子の最初の 4 バイトが0xFFFFFFFFに設定されます。 フラグが存在する場合は、0 に設定されます。