buffer Stub-Allocated
Anziché forzare una chiamata distinta per ogni nodo dell'albero o del grafico, è possibile indirizzare gli stub per calcolare le dimensioni dei dati e allocare e liberare memoria eseguendo una singola chiamata a midl_user_allocate o midl_user_free. L'attributo ACF [allocate(all_nodes)] indirizza gli stub per allocare o liberare tutti i nodi in una singola chiamata all'utente fornito funzioni di gestione della memoria.
Ad esempio, un'applicazione RPC potrebbe usare la struttura di dati dell'albero binario seguente:
/* 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;
L'attributo ACF [allocate(all_nodes)] applicato a questo tipo di dati viene visualizzato nella dichiarazione typedef in ACF come:
/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;
L'attributo [allocato] può essere applicato solo ai tipi di puntatore. L'attributo [allocato] ACF è un'estensione Microsoft per DCE IDL e, di conseguenza, non è disponibile se si compila con l'opzione MIDL /osf . Quando [allocate(all_nodes)] viene applicato a un tipo puntatore, gli stub generati dal compilatore MIDL attraversano la struttura di dati specificata per determinare le dimensioni di allocazione. Gli stub effettuano quindi una singola chiamata per allocare l'intera quantità di memoria necessaria dal grafico o dall'albero. Un'applicazione client può liberare memoria in modo molto più efficiente eseguendo una singola chiamata a midl_user_free. Tuttavia, le prestazioni server-stub sono in genere aumentate quando si usa l'allocazione di memoria node-by-node perché gli stub del server possono spesso usare memoria privata che non richiede allocazioni.
Per altre informazioni, vedere Allocazione node per nodo e deallocazione.