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