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].) |