Partager via


Résumé des règles d’allocation de mémoire

Le tableau suivant récapitule les règles clés relatives à l’allocation de mémoire.

ÉLÉMENT MIDL Description
Pointeurs de niveau supérieur [ ref] Doit être des pointeurs non null.
Valeur de retour de fonction La nouvelle mémoire est toujours allouée pour les valeurs de retour de pointeur.
[ unique, out] ou [ ptr, out] pointeur Non autorisé par MIDL.
Non de niveau supérieur [unique , dans, out] ou [ptr, in, out] pointeur qui passe de null à non null Les stubs clients allouent de la nouvelle mémoire sur le client lors du retour.
Non de niveau supérieur [unique , dans, pointeur] qui passe de non null à null La mémoire est orpheline sur le client ; l’application cliente est responsable de la libération de la mémoire et de la prévention des fuites.
Non de niveau supérieur [ptr, dans, ] pointeur qui passe de non null à null La mémoire est orpheline sur le client s’il n’est pas alias ; l’application cliente est responsable de la libération et de la prévention des fuites de mémoire dans ce cas.
[ref] pointeurs La couche Application cliente alloue généralement.
Non null [dans, pointeur] Les stubs tentent d’écrire dans le stockage existant sur le client. Si [chaîne] et que la taille augmente au-delà de la taille allouée sur le client, cela entraîne une erreur GP lors du retour.

 

Le tableau suivant récapitule les effets des attributs IDL et ACF clés sur la gestion de la mémoire.

Fonctionnalité MIDL Problèmes du client Problèmes de serveur
[ allouer(single_node)], [allocation(all_nodes)] Détermine si un ou plusieurs appels sont effectués aux fonctions de mémoire. Identique au client, sauf que la mémoire privée peut souvent être utilisée pour allouer (single_node) [in] et [in,out] données.
[allocate(free)] ou [allocate(dont_free)] (Aucun ; affecte le serveur.) Détermine si la mémoire sur le serveur est libérée après chaque appel de procédure distante.
attributs de tableau [ max_is] et [ size_is] (Aucun ; affecte le serveur.) Détermine la taille de la mémoire à allouer.
[ byte_count] Le client doit allouer la mémoire tampon ; non alloués ou libérés par des stubs client. L’attribut de paramètre ACF détermine la taille de la mémoire tampon allouée sur le serveur.
[ enable_allocate] Généralement, aucun. Toutefois, le client peut utiliser un autre environnement de gestion de la mémoire. Le serveur utilise un autre environnement de gestion de la mémoire. RpcSmAllocate doit être utilisé pour les allocations.
[ dans]attribute Application cliente chargée d’allouer de la mémoire pour les données. Alloué sur le serveur par stubs.
Attribut [ out] Alloué sur le client par stubs. [pointeur]-only doit être [ref] pointeur ; alloué sur le serveur par stubs.
Attribut [ ref] La mémoire référencée par pointeur doit être allouée par l’application cliente. Pointeurs de référence de niveau supérieur et de premier niveau gérés par des stubs.
Attribut [ unique] La valeur null à null peut entraîner une mémoire orpheline ; La valeur null à la valeur null entraîne l’appel du stub du client midl_user_allocate. (Affecte le client.)
Attribut [ ptr] (Voir [ unique].) (Voir [ unique].)