asignar atributo

El atributo ACF [allocate] permite personalizar la asignación y desasignación de memoria para un tipo definido en el archivo IDL.

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

Parámetros

allocate-option-list

Especifica una o varias opciones de asignación de memoria. Seleccione uno de single_node o all_nodes, o bien uno de los dont_free o uno de cada par. Al especificar más de una opción, separe las opciones con comas.

type-attribute-list

Especifica otros atributos opcionales de tipo ACF. Al especificar más de un atributo de tipo, separe las opciones con comas.

type-name

Especifica un tipo definido en el archivo IDL.

Comentarios

El atributo [allocate] tiene las siguientes opciones válidas.

Opción Descripción
all_nodes Realiza una llamada para asignar y liberar memoria para todos los nodos.
single_node Realiza muchas llamadas individuales para asignar y liberar cada nodo de memoria.
free Libera memoria devuelta desde el código auxiliar del servidor.
dont_free No libera memoria devuelta desde el código auxiliar del servidor.

 

De forma predeterminada, los códigos auxiliares pueden asignar almacenamiento para los datos a los que hace referencia un puntero único o completo llamando a midl_user_allocate y midl_user_free individualmente para cada puntero.

Puede optimizar la velocidad de la aplicación especificando la opción all_nodes. Esta opción dirige el código auxiliar para calcular el tamaño de toda la memoria a la que se hace referencia a través del puntero del tipo especificado y para realizar una sola llamada a midl_user_allocate. El código auxiliar libera la memoria realizando una llamada a midl_user_free.

La opción dont_free dirige al compilador MIDL para generar un código auxiliar del servidor que no llama a midl_user_free para el tipo especificado. La opción dont_free permite que las estructuras de puntero permanezcan accesibles para la aplicación de servidor después de que la llamada al procedimiento remoto se haya completado y devuelto al cliente.

El atributo [allocate] hará que cualquier parámetro [in, out] que sea un puntero a un tipo calificado con la opción all_nodes reasignar la memoria cuando los datos no están separados. Es responsabilidad de la aplicación liberar la memoria asignada anteriormente para este parámetro. Por ejemplo:

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

El tipo de datos PTHISTYPE se reasignará en la dirección [out] mediante el código auxiliar antes de desmarizar. Por lo tanto, la aplicación debe liberar la memoria asignada previamente para los datos de este parámetro o se producirá una fuga de memoria.

Ejemplos

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

Vea también

Archivo de configuración de la aplicación (ACF)

En

midl_user_allocate

midl_user_free

out

Typedef