Delen via


Stub-Allocated buffers

In plaats van een afzonderlijke aanroep af te dwingen voor elk knooppunt van de structuur of grafiek, kunt u de stubs omsturen om de grootte van de gegevens te berekenen en geheugen vrij te maken door één aanroep uit te voeren naar midl_user_allocate of midl_user_free. Het ACF-kenmerk [toewijzen(all_nodes)] stuurt de stubs om alle knooppunten toe te wijzen of vrij te maken in één aanroep naar de door de gebruiker geleverde geheugenbeheerfuncties.

Een RPC-toepassing kan bijvoorbeeld de volgende binaire structuurgegevensstructuur gebruiken:

/* 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;

Het ACF-kenmerk [toewijzen(all_nodes)] toegepast op dit gegevenstype wordt weergegeven in de declaratie typedef in het ACF als:

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

Het kenmerk [toewijzen] kan alleen worden toegepast op aanwijzertypen. Het [toewijzen] ACF-kenmerk is een Microsoft-extensie voor DCE IDL en is als zodanig niet beschikbaar als u compileert met de MIDL-/osf--switch. Wanneer [toewijzen(all_nodes)] wordt toegepast op een aanwijzertype, doorlopen de stubs die door de MIDL-compiler worden gegenereerd, de opgegeven gegevensstructuur om de toewijzingsgrootte te bepalen. De stubs maken vervolgens één aanroep om de volledige hoeveelheid geheugen toe te wijzen die nodig is voor de grafiek of boomstructuur. Een clienttoepassing kan veel efficiënter geheugen vrijmaken door één aanroep naar midl_user_freete maken. Server-stub-prestaties worden echter over het algemeen verhoogd bij het gebruik van geheugentoewijzing van knooppunten per knooppunt, omdat de server-stubs vaak privégeheugen kunnen gebruiken waarvoor geen toewijzingen zijn vereist.

Zie Node-by-Node Allocation and Deallocationvoor meer informatie.