Allocation de mémoire dans COM
Parfois, une méthode alloue une mémoire tampon sur le tas et retourne l’adresse de la mémoire tampon à l’appelant. COM définit une paire de fonctions pour allouer et libérer de la mémoire sur le tas.
- La fonction CoTaskMemAlloc alloue un bloc de mémoire.
- La fonction CoTaskMemFree libère un bloc de mémoire qui a été alloué avec CoTaskMemAlloc.
Nous avons vu un exemple de ce modèle dans l’exemple de boîte de dialogue Ouvrir :
PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
// ...
CoTaskMemFree(pszFilePath);
}
La méthode GetDisplayName alloue de la mémoire à une chaîne. En interne, la méthode appelle CoTaskMemAlloc pour allouer la chaîne. Lorsque la méthode retourne, pszFilePath pointe vers l’emplacement de mémoire de la nouvelle mémoire tampon. L’appelant est chargé d’appeler CoTaskMemFree pour libérer la mémoire.
Pourquoi COM définit-il ses propres fonctions d’allocation de mémoire ? L’une des raisons est de fournir une couche d’abstraction sur l’allocateur de tas. Sinon, certaines méthodes peuvent appeler malloc tandis que d’autres appellent new. Ensuite, votre programme aurait besoin d’appeler gratuitement dans certains cas et de supprimer dans d’autres, et garder le suivi de tout cela deviendrait rapidement impossible. Les fonctions d’allocation COM créent une approche uniforme.
Une autre considération est le fait que COM est une norme binaire , de sorte qu’il n’est pas lié à un langage de programmation particulier. Par conséquent, COM ne peut pas s’appuyer sur une forme d’allocation de mémoire spécifique au langage.
Suivant