allocate 属性

[allocate] ACF 属性允许自定义 IDL 文件中定义的类型的内存分配和解除分配。

typedef [allocate (allocate-option-list) [, type-attribute-list] ] type-name;

parameters

allocate-option-list

指定一个或多个内存分配选项。 选择 single_nodeall_nodes之一,或 免费dont_free之一,或从每对中选择一个。 指定多个选项时,请用逗号分隔选项。

type-attribute-list

指定其他可选的 ACF 类型属性。 指定多个类型属性时,请用逗号分隔选项。

type-name

指定 IDL 文件中定义的类型。

备注

[allocate] 属性具有以下有效选项。

选项 说明
all_nodes 调用一次以为所有节点分配和释放内存。
single_node 进行多个单独调用来分配和释放每个内存节点。
free 从服务器存根返回时释放内存。
dont_free 从服务器存根返回时不释放内存。

 

默认情况下,存根可以通过调用midl_user_allocate为唯一指针或完整指针引用的数据分配存储 并为每个指针单独 midl_user_free

可以通过指定 all_nodes 选项来优化应用程序的速度。 此选项指示存根计算通过指定类型的指针引用的所有内存的大小,并单个调用 midl_user_allocate。 存根通过调用 midl_user_free来释放内存。

dont_free 选项指示 MIDL 编译器生成不调用指定类型的midl_user_free的服务器存根。 dont_free 选项允许在远程过程调用完成并返回到客户端后,服务器应用程序仍可访问指针结构。

[allocate] 属性将导致任何 [in, out] 参数,该参数是指向使用 all_nodes 选项限定的类型的指针,以在数据取消封存时重新分配内存。 应用程序负责释放以前为此参数分配的内存。 例如:

typedef struct thistype 
{ 
    [string] char * PTHISTYPE;  
} * PTHISTYPE
HRESULT proc1 ( [in,out] PTHISTYPE * ppthistype);

在取消封存之前,存根将以 [out] 方向重新分配数据类型 PTHISTYPE。 因此,应用程序必须释放之前为此参数的数据分配的内存,否则会发生内存泄漏。

示例

/* ACF file */ 
typedef [allocate(all_nodes, dont_free)] PTYPE1; 
typedef [allocate(all_nodes)] PTYPE2; 
typedef [allocate(dont_free)] PTYPE3;

另请参阅

应用程序配置文件 (ACF)

in

midl_user_allocate

midl_user_free

out

typedef