Riepilogo delle regole di allocazione della memoria

La tabella seguente riepiloga le regole chiave relative all'allocazione di memoria.

Elemento MIDL Descrizione
Puntatori di primo livello [ ref] Deve essere puntatore non Null.
Valore restituito della funzione La nuova memoria viene sempre allocata per i valori restituiti del puntatore.
[ unique, out] o [ ptr, out] puntatore Non consentito da MIDL.
Puntatore non di primo livello [unique, in, out] o [ptr, in, out] che passa da Null a non Null Gli stub client allocano nuova memoria al client al ritorno.
Puntatore non di primo livello [univoco, in, out] che passa da non Null a Null La memoria è orfana nel client; l'applicazione client è responsabile della liberazione della memoria e della prevenzione delle perdite.
Puntatore non di primo livello [ptr, in, out] che passa da non Null a Null La memoria verrà orfana nel client se non viene eseguito l'alias; l'applicazione client è responsabile della liberazione e della prevenzione delle perdite di memoria in questo caso.
[ref] puntatori Il livello applicazione client viene in genere allocato.
Puntatore non null [in, out] Gli stub tentano di scrivere nell'archiviazione esistente nel client. Se [string] e le dimensioni aumentano oltre le dimensioni allocate nel client, genererà un errore criteri di gruppo al ritorno.

 

Nella tabella seguente vengono riepilogati gli effetti degli attributi IDL e ACF principali sulla gestione della memoria.

Funzionalità MIDL Problemi relativi al client Problemi del server
[ allocate(single_node)], [allocate(all_nodes)] Determina se vengono effettuate una o più chiamate alle funzioni di memoria. Analogamente al client, ad eccezione della memoria privata, spesso può essere usata per allocare (single_node) [in] e [in,out] i dati.
[allocate(free)] o [allocate(dont_free)] (Nessuno; influisce sul server). Determina se la memoria nel server viene liberata dopo ogni chiamata di procedura remota.
attributi di matrice [ max_is] e [ size_is] (Nessuno; influisce sul server). Determina le dimensioni della memoria da allocare.
[ byte_count] Il client deve allocare buffer; non allocata o liberata dagli stub del client. L'attributo del parametro ACF determina le dimensioni del buffer allocato nel server.
[ enable_allocate] Di solito, nessuno. Tuttavia, il client può usare un ambiente di gestione della memoria diverso. Il server usa un ambiente di gestione della memoria diverso. RpcSmAllocate deve essere usato per le allocazioni.
[ in]attributo Applicazione client responsabile dell'allocazione della memoria per i dati. Allocato nel server da stub.
Attributo [ out] Allocato nel client da stub. [out]-only puntatore deve essere [ref] puntatore; allocato nel server da stub.
Attributo [ ref] La memoria a cui fa riferimento il puntatore deve essere allocata dall'applicazione client. Puntatori di riferimento di primo livello e di primo livello gestiti da stub.
Attributo [ unique] Il valore da non Null a Null può comportare la memoria orfana; Null a non Null fa sì che lo stub del client chiami midl_user_allocate. (Influisce sul client.
Attributo [ ptr] (Vedere [ unique].) (Vedere [ unique].)