Stub-Allocated缓冲区
可以指示存根计算数据大小,并通过对 midl_user_allocate或midl_user_free 进行单个调用来分配和释放内存,而不是强制对 树或图形的每个节点执行不同的调用。 ACF 属性 [allocate (all_nodes) ] 指示存根在对用户提供的内存管理功能的单个调用中分配或释放所有节点。
例如,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;
应用于此数据类型的 ACF 属性 [allocate (all_nodes) ] 在 ACF 的 typedef 声明中显示为:
/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;
[allocate] 属性只能应用于指针类型。 [allocate] ACF 属性是 DCE IDL 的 Microsoft 扩展,因此,如果使用 MIDL /osf 开关进行编译,则不可用。 [ allocate (all_nodes) ] 应用于指针类型时,MIDL 编译器生成的存根将遍历指定的数据结构以确定分配大小。 然后,存根发出单个调用,以分配图形或树所需的全部内存量。 客户端应用程序可以通过对 midl_user_free进行单个调用,更高效地释放内存。 但是,使用逐节点内存分配时,服务器存根性能通常会提高,因为服务器存根通常可以使用不需要分配的专用内存。
有关其他信息,请参阅 逐节点分配和解除分配。