Condividi tramite


Allocazione di memoria in COM

A volte un metodo alloca un buffer di memoria nell'heap e restituisce l'indirizzo del buffer al chiamante. COM definisce una coppia di funzioni per l'allocazione e la liberazione della memoria nell'heap.

  • La funzioneCoTaskMemAlloc alloca un blocco di memoria.
  • La funzioneCoTaskMemFreelibera un blocco di memoria allocato con CoTaskMemAlloc.

È stato illustrato un esempio di questo modello nella finestra di dialogo apri esempio:

PWSTR pszFilePath;
hr = pItem->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
if (SUCCEEDED(hr))
{
    // ...
    CoTaskMemFree(pszFilePath);
}

Il metodoGetDisplayNamealloca memoria per una stringa. Internamente, il metodo chiama CoTaskMemAlloc per allocare la stringa. Quando il metodo termina, pszFilePath punta alla posizione di memoria del nuovo buffer. Il chiamante è responsabile della chiamata CoTaskMemFree per liberare la memoria.

Perché COM definisce le proprie funzioni di allocazione della memoria? Un motivo è fornire un livello di astrazione sull'allocatore heap. In caso contrario, alcuni metodi potrebbero chiamare malloc mentre altri denominati nuovo. Il programma dovrà quindi chiamare gratis in alcuni casi e eliminare in altri, e tenere traccia di tutto sarebbe diventato rapidamente impossibile. Le funzioni di allocazione COM creano un approccio uniforme.

Un'altra considerazione è il fatto che COM è un binario standard, quindi non è legato a un particolare linguaggio di programmazione. Pertanto, COM non può basarsi su qualsiasi forma di allocazione di memoria specifica del linguaggio.

Prossimo

procedure di codifica COM