Compartir a través de


Búferes de Stub-Allocated

En lugar de forzar una llamada distinta para cada nodo del árbol o gráfico, puede dirigir los códigos auxiliares para calcular el tamaño de los datos y asignar y liberar memoria realizando una sola llamada a midl_user_allocate o midl_user_free. El atributo ACF [allocate(all_nodes)] dirige los códigos auxiliares para asignar o liberar todos los nodos en una sola llamada a las funciones de administración de memoria proporcionadas por el usuario.

Por ejemplo, una aplicación RPC podría usar la siguiente estructura de datos de árbol binario:

/* 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;

El atributo ACF [allocate(all_nodes)] aplicado a este tipo de datos aparece en la declaración typedef de ACF como:

/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;

El atributo [allocate] solo se puede aplicar a los tipos de puntero. El atributo [allocate] ACF es una extensión de Microsoft para DCE IDL y, como tal, no está disponible si se compila con el modificador /osf MIDL. Cuando se aplica [allocate(all_nodes)] a un tipo de puntero, los códigos auxiliares generados por el compilador MIDL atraviesan la estructura de datos especificada para determinar el tamaño de asignación. A continuación, los códigos auxiliares realizan una sola llamada para asignar toda la cantidad de memoria necesaria para el gráfico o árbol. Una aplicación cliente puede liberar memoria de forma mucho más eficaz mediante la realización de una sola llamada a midl_user_free. Sin embargo, el rendimiento del código auxiliar del servidor suele aumentarse cuando se usa la asignación de memoria de nodo por nodo, ya que los códigos auxiliares del servidor a menudo pueden usar memoria privada que no requiere asignaciones.

Para obtener más información, consulte Asignación y desasignación de nodos por nodo.