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;
-
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.
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.
/* ACF file */
typedef [allocate(all_nodes, dont_free)] PTYPE1;
typedef [allocate(all_nodes)] PTYPE2;
typedef [allocate(dont_free)] PTYPE3;