配列 (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 に設定されます。