Stub-Allocated Arabellekleri
Ağaç veya grafın her düğümü için ayrı bir çağrı zorlamak yerine, saplamaları verilerin boyutunu hesaplamaya ve midl_user_allocate veya midl_user_freeiçin tek bir çağrı yaparak bellek ayırmaya ve boşaltmaya yönlendirebilirsiniz. [allocate(all_nodes)] ACF özniteliği, saplamaları kullanıcı tarafından sağlanan bellek yönetimi işlevlerine tek bir çağrıda tüm düğümleri ayırmaya veya boşaltmaya yönlendirir.
Örneğin, bir RPC uygulaması aşağıdaki ikili ağaç veri yapısını kullanabilir:
/* IDL file fragment */
typedef struct _TREE_TYPE
{
short sNumber;
struct _TREE_TYPE * pLeft;
struct _TREE_TYPE * pRight;
} TREE_TYPE;
typedef TREE_TYPE * P_TREE_TYPE;
Bu veri türüne uygulanan ACF özniteliği [allocate(all_nodes)] ACF'deki typedef bildiriminde şu şekilde görünür:
/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;
[allocate] özniteliği yalnızca işaretçi türlerine uygulanabilir. [allocate] ACF özniteliği, DCE IDL'nin bir Microsoft uzantısıdır ve MIDL /osf anahtarıyla derlediyseniz bu nedenle kullanılamaz. [allocate(all_nodes)] bir işaretçi türüne uygulandığında, MIDL derleyicisi tarafından oluşturulan saplamalar belirtilen veri yapısını geçirerek ayırma boyutunu belirler. Saplamalar daha sonra graf veya ağaç için gereken bellek miktarının tamamını ayırmak için tek bir çağrı yapar. İstemci uygulaması, midl_user_freeiçin tek bir çağrı yaparak belleği çok daha verimli bir şekilde boşaltabilir. Ancak, sunucu saptamaları genellikle ayırma gerektirmeyen özel bellek kullanabildiğinden düğüm düğüme göre bellek ayırma kullanılırken sunucu saptama performansı artar.
Ek bilgi için bkz. Node-by-Node Ayırma ve Serbest Bırakma.