Freigeben über


attribut "allocate"

Mit dem ACF-Attribut [zugeordnet] können Sie die Speicherzuordnung und -zuordnung für einen in der IDL-Datei definierten Typ anpassen.

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

Parameter

allocate-option-list

Gibt mindestens eine Speicherbelegungsoption an. Wählen Sie entweder eine von single_node oder all_nodes, oder einen der freien oder dont_free oder eines aus jedem Paar aus. Wenn Sie mehrere Optionen angeben, trennen Sie die Optionen durch Kommas.

type-attribute-list

Gibt weitere optionale ACF-Attribute an. Wenn Sie mehrere Typattribute angeben, trennen Sie die Optionen durch Kommas.

type-name

Gibt einen in der IDL-Datei definierten Typ an.

Bemerkungen

Das Attribut [allocate] verfügt über die folgenden gültigen Optionen.

Option BESCHREIBUNG
all_nodes Führt einen Aufruf aus, um Arbeitsspeicher für alle Knoten zuzuweisen und freizugeben.
single_node Führt viele einzelne Aufrufe aus, um jedem Knoten Arbeitsspeicher zuzuweisen und freizugeben.
free Gibt Arbeitsspeicher frei, wenn der Serverstub zurückgegeben wird.
dont_free Gibt nicht Arbeitsspeicher frei, wenn der Serverstub zurückgegeben wird.

 

Standardmäßig können die Stubs Speicher für Daten zuweisen, auf die durch einen eindeutigen oder vollständigen Zeiger verwiesen wird, indem sie midl_user_allocate aufrufen und für jeden Zeiger einzeln midl_user_free .

Sie können die Geschwindigkeit Ihrer Anwendung optimieren, indem Sie die Option all_nodes angeben. Diese Option weist den Stub an, die Größe des gesamten Arbeitsspeichers zu berechnen, auf den über den Zeiger des angegebenen Typs verwiesen wird, und einen einzelnen Aufruf von midl_user_allocate. Der Stub gibt den Arbeitsspeicher frei, indem er einen Aufruf an midl_user_free.

Die Option dont_free weist den MIDL-Compiler an, einen Serverstub zu generieren, der midl_user_free für den angegebenen Typ nicht aufruft. Die Option dont_free ermöglicht es der Serveranwendung, auf die Zeigerstrukturen zugreifen zu können, nachdem der Remoteprozeduraufruf abgeschlossen und an den Client zurückgegeben wurde.

Das Attribut [zugeordnet] bewirkt, dass jeder [in, out] -Parameter, der ein Zeiger auf einen Typ ist, der mit der Option all_nodes qualifiziert ist, den Speicher neu zuzuordnen, wenn die Daten nicht miteinander verknüpft werden. Es liegt in der Verantwortung der Anwendung, den zuvor für diesen Parameter zugewiesenen Arbeitsspeicher freizugeben. Beispiel:

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

Der Datentyp PTHISTYPE wird vom Stub in [out] -Richtung neu zugeordnet, bevor er die Marmarshaling auflöst. Daher muss die Anwendung den Speicher freigeben, den sie zuvor für die Daten dieses Parameters zugewiesen hat, andernfalls tritt ein Speicherverlust auf.

Beispiele

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

Weitere Informationen

Anwendungskonfigurationsdatei (Application Configuration File, ACF)

In

midl_user_allocate

midl_user_free

out

Typedef