allocare l'attributo

L'attributo ACF [allocate] consente di personalizzare l'allocazione della memoria e la deallocazione per un tipo definito nel file IDL.

typedef [allocate (allocate-option-list) [, type-attribute-list] ] type-name;

Parametri

allocate-option-list

Specifica una o più opzioni di allocazione della memoria. Selezionare una delle single_node o delle all_nodes oppure una delle dont_free gratuiteo una di ogni coppia. Quando si specificano più opzioni, separare le opzioni con le virgole.

type-attribute-list

Specifica altri attributi facoltativi di tipo ACF. Quando si specificano più attributi di tipo, separare le opzioni con le virgole.

type-name

Specifica un tipo definito nel file IDL.

Commenti

L'attributo [allocate] include le opzioni valide seguenti.

Opzione Descrizione
all_nodes Effettua una chiamata per allocare e liberare memoria per tutti i nodi.
single_node Esegue molte singole chiamate per allocare e liberare ogni nodo di memoria.
free Libera memoria in caso di restituzione dallo stub del server.
dont_free Non libera memoria in caso di restituzione dallo stub del server.

 

Per impostazione predefinita, gli stub possono allocare spazio di archiviazione per i dati a cui fa riferimento un puntatore univoco o completo chiamando midl_user_allocate e midl_user_free singolarmente per ogni puntatore.

È possibile ottimizzare la velocità dell'applicazione specificando l'opzione all_nodes. Questa opzione indirizza lo stub a calcolare le dimensioni di tutta la memoria a cui viene fatto riferimento tramite il puntatore del tipo specificato e per effettuare una singola chiamata a midl_user_allocate. Lo stub rilascia la memoria effettuando una chiamata a midl_user_free.

L'opzione dont_free indirizza il compilatore MIDL a generare uno stub del server che non chiama midl_user_free per il tipo specificato. L'opzione dont_free consente alle strutture del puntatore di rimanere accessibili all'applicazione server dopo che la chiamata alla procedura remota è stata completata e restituita al client.

L'attributo [allocate] causerà qualsiasi parametro [in, out] che sia un puntatore a un tipo qualificato con l'opzione all_nodes di riallocare la memoria quando i dati non sono stati separati. È responsabilità dell'applicazione liberare la memoria allocata in precedenza per questo parametro. Ad esempio:

typedef struct thistype 
{ 
    [string] char * PTHISTYPE;  
} * PTHISTYPE
HRESULT proc1 ( [in,out] PTHISTYPE * ppthistype);

Il tipo di dati PTHISTYPE verrà riallocato nella direzione [out] dello stub prima dell'annullamento delmarshaling. Pertanto, l'applicazione deve liberare la memoria allocata in precedenza per i dati di questo parametro oppure si verificherà una perdita di memoria.

Esempi

/* ACF file */ 
typedef [allocate(all_nodes, dont_free)] PTYPE1; 
typedef [allocate(all_nodes)] PTYPE2; 
typedef [allocate(dont_free)] PTYPE3;

Vedere anche

File di configurazione dell'applicazione (ACF)

Pollici

midl_user_allocate

midl_user_free

Cambio

Typedef