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] Il doit s’agir de 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.
Pointeur de niveau non supérieur [unique, in, out] ou [ptr, in, out] qui passe de null à non null Les stubs client allouent une nouvelle mémoire sur le client au retour.
Pointeur de niveau non supérieur [unique, in, out] qui passe de non null à null La mémoire est orpheline sur le client ; l’application cliente est chargée de libérer de la mémoire et d’éviter les fuites.
Pointeur de niveau non supérieur [ptr, in, out] qui passe de non null à null La mémoire sera orpheline sur le client si elle n’est pas sous 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 d’application client est généralement allouée.
Pointeur non null [in, out] Les stubs tentent d’écrire dans le stockage existant sur le client. Si la [chaîne] et la taille augmentent au-delà de la taille allouée sur le client, cela provoquera une erreur de stratégie de groupe au 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 de clients Problèmes de serveur
[ allouer(single_node)], [allouer(all_nodes)] Détermine si un ou plusieurs appels sont effectués aux fonctions de mémoire. Identique au client, à l’exception de la mémoire privée peut souvent être utilisée pour allouer (single_node) [in] et [in,out] des données.
[allocation(gratuit)] ou [allouer(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 une mémoire tampon ; non alloués ou libérés par les stubs du client. L’attribut de paramètre ACF détermine la taille de la mémoire tampon allouée sur le serveur.
[ enable_allocate] Habituellement, 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.
[ in]attribute Application cliente chargée d’allouer la mémoire pour les données. Alloués sur le serveur par stubs.
Attribut [ out] Alloué sur le client par stubs. Le pointeur [out]-only doit être un pointeur [ref] ; alloués sur le serveur par stubs.
Attribut [ ref] La mémoire référencée par le 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] Non null à null peut entraîner une mémoire orpheline ; Null à non null entraîne l’appel du stub client à midl_user_allocate. (Affecte le client.)
Attribut [ ptr ] (Voir unique [].) (Voir unique [].)