Stub-Allocated バッファー
ツリーまたはグラフの各ノードに対して個別の呼び出しを強制するのではなく、midl_user_allocate または midl_user_freeを 1 回呼び出すことで、スタブにデータのサイズを計算し、メモリを割り当てて解放するように指示できます。 ACF 属性 [allocate(all_nodes)] は、ユーザーが指定したメモリ管理機能を 1 回の呼び出しですべてのノードを割り当てるか解放するようにスタブに指示します。
たとえば、RPC アプリケーションでは、次のバイナリ ツリー データ構造を使用できます。
/* IDL file fragment */
typedef struct _TREE_TYPE
{
short sNumber;
struct _TREE_TYPE * pLeft;
struct _TREE_TYPE * pRight;
} TREE_TYPE;
typedef TREE_TYPE * P_TREE_TYPE;
このデータ型に適用 [allocate(all_nodes)] ACF 属性は、ACF の typedef 宣言に次のように表示されます。
/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;
[allocate] 属性はポインター型にのみ適用できます。 [allocate] ACF 属性は DCE IDL の Microsoft 拡張機能であるため、MIDL /osf スイッチを使用してコンパイルする場合は使用できません。 ポインター型 [allocate(all_nodes)] が適用されると、MIDL コンパイラによって生成されたスタブは、指定されたデータ構造を走査して割り当てサイズを決定します。 スタブは、グラフまたはツリーで必要なメモリの量全体を割り当てるために 1 回の呼び出しを行います。 クライアント アプリケーションは、midl_user_freeを 1 回呼び出すことで、メモリをより効率的に解放できます。 ただし、サーバー スタブでは割り当てを必要としないプライベート メモリを使用する場合が多いため、ノードごとのメモリ割り当てを使用すると、通常、サーバー スタブのパフォーマンスが向上します。
詳細については、「ノードごとの割り当てと割り当て解除 をする」を参照してください。