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 diriger les stubs pour calculer la taille des données et 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)] dirige les stubs pour allouer ou libérer tous les nœuds dans un seul appel aux fonctions de gestion de 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 dans l’ACF comme suit :

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

L'[allouer] attribut ne peut être appliqué qu’aux types de pointeurs. L'[allocation] attribut ACF est une extension Microsoft à DCE IDL et, par conséquent, 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 toute la quantité de mémoire nécessaire par le 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 du stub du serveur sont généralement augmentées lors de l’utilisation de l’allocation de mémoire de nœud par nœud, car les stubs de serveur peuvent souvent utiliser la mémoire privée qui ne nécessite aucune allocation.

Pour plus d’informations, consultez allocation de nœud par nœud etde désallocation.