Bagikan melalui


Alokasi Memori di COM

Terkadang metode mengalokasikan buffer memori pada tumpukan dan mengembalikan alamat buffer ke pemanggil. COM mendefinisikan sepasang fungsi untuk mengalokasikan dan membebaskan memori pada tumpukan.

Kami melihat contoh pola ini dalam contoh kotak dialog buka :

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

MetodeGetDisplayNamemengalokasikan memori untuk string. Secara internal, metode memanggil CoTaskMemAlloc untuk mengalokasikan string. Ketika metode kembali, pszFilePath menunjuk ke lokasi memori buffer baru. Pemanggil bertanggung jawab untuk memanggil CoTaskMemFree untuk membebaskan memori.

Mengapa COM menentukan fungsi alokasi memorinya sendiri? Salah satu alasannya adalah menyediakan lapisan abstraksi di atas alokator timbunan. Jika tidak, beberapa metode mungkin memanggil malloc sementara yang lain disebut baru . Kemudian program Anda perlu memanggil gratis dalam beberapa kasus dan menghapus di orang lain, dan melacak semuanya akan dengan cepat menjadi tidak mungkin. Fungsi alokasi COM membuat pendekatan seragam.

Pertimbangan lain adalah fakta bahwa COM adalah standar biner, sehingga tidak terikat dengan bahasa pemrograman tertentu. Oleh karena itu, COM tidak dapat mengandalkan bentuk alokasi memori khusus bahasa apa pun.

Depan

Praktik Coding COM