Stub-Allocated Puffer
Anstatt einen eindeutigen Aufruf für jeden Knoten der Struktur oder jedes Diagramms zu erzwingen, können Sie die Stubs an die Berechnung der Größe der Daten weiterleiten und Arbeitsspeicher zuordnen und freigeben, indem Sie einen einzelnen Aufruf an midl_user_allocate oder midl_user_free. Das ACF-Attribut [allocate(all_nodes)] leitet die Stubs an, alle Knoten in einem einzigen Aufruf an die vom Benutzer bereitgestellten Speicherverwaltungsfunktionen zuzuweisen oder freizugeben.
Eine RPC-Anwendung kann z. B. die folgende binäre Struktur der Struktur 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 ACF-Attribut [allocate(all_nodes)] auf diesen Datentyp angewendet wird, wird in der typedef--Deklaration im ACF angezeigt als:
/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;
Das [zuweisen] Attributs kann nur auf Zeigertypen angewendet werden. Das [zuweisen] ACF-Attributs ist eine Microsoft-Erweiterung für DCE IDL und ist daher nicht verfügbar, wenn Sie mit dem MIDL-/osf Switch kompilieren. Wenn [allocate(all_nodes)] auf einen Zeigertyp angewendet wird, durchlaufen die stubs, die vom MIDL-Compiler generiert werden, um die angegebene Datenstruktur zu bestimmen. Die Stubs führen dann einen einzelnen Aufruf aus, um die gesamte Menge an Arbeitsspeicher zuzuweisen, die vom Diagramm oder der Struktur benötigt wird. Eine Clientanwendung kann viel effizienter Arbeitsspeicher freigeben, indem sie einen einzelnen Aufruf an midl_user_freevornehmen. Die Server-Stubleistung wird jedoch in der Regel erhöht, wenn die Knoten-nach-Knoten-Speicherzuordnung verwendet wird, da die Server-Stubs häufig privaten Speicher verwenden können, der keine Zuordnungen erfordert.
Weitere Informationen finden Sie unter Node-by-Node Allocation and Deallocation.