Partager via


mémoires tampons Stub-Allocated

Au lieu de forcer un appel distinct pour chaque nœud de l’arborescence ou du graphique, vous pouvez indiquer aux stubs de calculer la taille des données et d’allouer et libérer de la mémoire en effectuant un seul appel à midl_user_allocate ou midl_user_free. L’attribut ACF [allocate(all_nodes)] indique aux stubs d’allouer ou de libérer tous les nœuds en un seul appel aux fonctions de gestion de la mémoire fournie par l’utilisateur.

Par exemple, une application RPC peut utiliser la structure de données d’arborescence binaire suivante :

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

L’attribut ACF [allocate(all_nodes)] appliqué à ce type de données apparaît dans la déclaration typedef de l’ACF comme suit :

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

L’attribut [allocate] ne peut être appliqué qu’aux types de pointeurs. L’attribut ACF [allocate] est une extension Microsoft à DCE IDL et, en tant que tel, n’est pas disponible si vous compilez avec le commutateur MIDL /osf . Lorsque [allocate(all_nodes)] est appliqué à un type de pointeur, les stubs générés par le compilateur MIDL parcourent la structure de données spécifiée pour déterminer la taille d’allocation. Les stubs effectuent ensuite un seul appel pour allouer la quantité totale de mémoire nécessaire au graphique ou à l’arborescence. Une application cliente peut libérer de la mémoire beaucoup plus efficacement en effectuant un seul appel à midl_user_free. Toutefois, les performances de stub de serveur sont généralement accrues lors de l’utilisation de l’allocation de mémoire nœud par nœud, car les stubs de serveur peuvent souvent utiliser de la mémoire privée qui ne nécessite aucune allocation.

Pour plus d’informations, consultez Allocation et désallocation nœud par nœud.