attribut d’allocation
L’attribut ACF [allouer] vous permet de personnaliser l’allocation et la désallocation de mémoire pour un type défini dans le fichier IDL.
typedef [allocate (allocate-option-list) [, type-attribute-list] ] type-name;
Paramètres
-
allocate-option-list
-
Spécifie une ou plusieurs options d’allocation de mémoire. Sélectionnez l’une des single_node ou all_nodes, ou l’une des dont_free libres ou dont_free, ou une de chaque paire. Lorsque vous spécifiez plusieurs options, séparez les options par des virgules.
-
type-attribute-list
-
Spécifie d’autres attributs de type ACF facultatifs. Lorsque vous spécifiez plusieurs attributs de type, séparez les options par des virgules.
-
type-name
-
Spécifie un type défini dans le fichier IDL.
Notes
L’attribut [allocate] a les options valides suivantes.
Option | Description |
---|---|
all_nodes | Effectue un appel pour allouer et libérer de la mémoire pour tous les nœuds. |
single_node | Effectue de nombreux appels individuels pour allouer et libérer chaque nœud de mémoire. |
free | Libère de la mémoire au retour du stub du serveur. |
dont_free | Ne libère pas de mémoire au retour du stub du serveur. |
Par défaut, les stubs peuvent allouer du stockage pour les données référencées par un pointeur unique ou complet en appelant midl_user_allocate et midl_user_free individuellement pour chaque pointeur.
Vous pouvez optimiser la vitesse de votre application en spécifiant l’option all_nodes. Cette option indique au stub de calculer la taille de toute la mémoire référencée via le pointeur du type spécifié et d’effectuer un seul appel à midl_user_allocate. Le stub libère la mémoire en effectuant un appel à midl_user_free.
L’option dont_free indique au compilateur MIDL de générer un stub de serveur qui n’appelle pas midl_user_free pour le type spécifié. L’option dont_free permet aux structures de pointeur de rester accessibles à l’application serveur une fois l’appel de procédure distante terminé et retourné au client.
L’attribut [allocate] entraîne la réaffectation de la mémoire à un paramètre [in, out] qui est un pointeur vers un type qualifié avec l’option all_nodes . Il incombe à l’application de libérer la mémoire allouée précédemment pour ce paramètre. Exemple :
typedef struct thistype
{
[string] char * PTHISTYPE;
} * PTHISTYPE
HRESULT proc1 ( [in,out] PTHISTYPE * ppthistype);
Le type de données PTHISTYPE est réaffecté dans la direction [out] par le stub avant le démarshalage. Par conséquent, l’application doit libérer la mémoire qu’elle a précédemment allouée pour les données de ce paramètre, sinon une fuite de mémoire se produit.
Exemples
/* ACF file */
typedef [allocate(all_nodes, dont_free)] PTYPE1;
typedef [allocate(all_nodes)] PTYPE2;
typedef [allocate(dont_free)] PTYPE3;
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour