Freigeben über


Stub-Allocated Puffer

Anstatt einen eindeutigen Aufruf für jeden Knoten der Struktur oder des Diagramms zu erzwingen, können Sie die Stubs anweisen, die Größe der Daten zu berechnen und Arbeitsspeicher zuzuweisen und freizugeben, indem Sie einen einzelnen Aufruf von midl_user_allocate oder midl_user_free. Das ACF-Attribut [allocate(all_nodes)] weist die Stubs an, alle Knoten in einem einzigen Aufruf der vom Benutzer bereitgestellten Speicherverwaltungsfunktionen zuzuordnen oder freizugeben.

Beispielsweise kann eine RPC-Anwendung die folgende binäre Strukturdatenstruktur verwenden:

/* IDL file fragment */
typedef struct _TREE_TYPE 
{
    short sNumber;
    struct _TREE_TYPE * pLeft;
    struct _TREE_TYPE * pRight;
} TREE_TYPE;

typedef TREE_TYPE * P_TREE_TYPE;

Das auf diesen Datentyp angewendete ACF-Attribut [allocate(all_nodes)] wird in der typedef-Deklaration im ACF wie folgt angezeigt:

/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;

Das Attribut [allocate] kann nur auf Zeigertypen angewendet werden. Das [allocate] -ACF-Attribut ist eine Microsoft-Erweiterung für DCE IDL und als solches nicht verfügbar, wenn Sie mit dem SCHALTER MIDL /osf kompilieren. Wenn [allocate(all_nodes)] auf einen Zeigertyp angewendet wird, durchlaufen die vom MIDL-Compiler generierten Stubs die angegebene Datenstruktur, um die Zuordnungsgröße zu bestimmen. Die Stubs führen dann einen einzigen Aufruf aus, um die gesamte Menge an Arbeitsspeicher zuzuweisen, die für das Diagramm oder die Struktur benötigt wird. Eine Clientanwendung kann Arbeitsspeicher viel effizienter freigeben, indem sie einen einzelnen Aufruf von midl_user_free. Die Serverstubleistung wird jedoch im Allgemeinen erhöht, wenn die Speicherbelegung von Knoten zu Knoten verwendet wird, da die Serverstubs häufig privaten Arbeitsspeicher verwenden können, der keine Zuordnungen erfordert.

Weitere Informationen finden Sie unter Knoten-nach-Knoten-Zuordnung und Zuordnung aufheben.