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].) |