COM'da Bellek Ayırma

Bazen bir yöntem yığında bir bellek arabelleği ayırır ve arabelleğin adresini çağırana döndürür. COM, yığında bellek ayırmaya ve boşaltmaya yönelik bir işlev çifti tanımlar.

Aç iletişim kutusu örneğinde bu desenin bir örneğini gördük:

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

GetDisplayName yöntemi bir dize için bellek ayırır. dahili olarak yöntemi, dizeyi ayırmak için CoTaskMemAlloc çağırır. yöntemi döndürdüğünde pszFilePath yeni arabelleğin bellek konumunu gösterir. Çağıran, belleği boşaltmak için CoTaskMemFree çağırmaktan sorumludur.

COM neden kendi bellek ayırma işlevlerini tanımlar? Bunun bir nedeni, yığın ayırıcı üzerinde bir soyutlama katmanı sağlamaktır. Aksi takdirde, bazı yöntemler malloc, diğerleri ise yeni çağırabilir. Bu durumda programınızın bazı durumlarda ücretsiz çağırması ve bazı durumlarda silmesi ve bunların hepsini takip etmek hızla imkansız hale gelir. COM ayırma işlevleri tekdüzen bir yaklaşım oluşturur.

Com'un bir ikili standardı olması, dolayısıyla belirli bir programlama diline bağlı olmaması da dikkate alınmalıdır. Bu nedenle, COM dile özgü herhangi bir bellek ayırma biçimine güvenemez.

Önümüzdeki

COM Kodlama Uygulamaları