Dela via


Stub-Allocated buffertar

I stället för att tvinga fram ett distinkt anrop för varje nod i trädet eller grafen kan du dirigera stubs för att beräkna datastorleken och allokera och frigöra minne genom att göra ett enda anrop till midl_user_allocate eller midl_user_free. ACF-attributet [allokera(all_nodes)] dirigerar stubs att allokera eller frigöra alla noder i ett enda anrop till användarens tillhandahållna minneshanteringsfunktioner.

Ett RPC-program kan till exempel använda följande binära träddatastruktur:

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

ACF-attributet [allokera(all_nodes)] som tillämpas på den här datatypen visas i typedef-deklarationen i ACF som:

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

Attributet [allokera] kan endast tillämpas på pekartyper. Attributet [allokera] ACF är ett Microsoft-tillägg till DCE IDL och är därför inte tillgängligt om du kompilerar med VÄXELn MIDL /osf. När [allokera(all_nodes)] tillämpas på en pekartyp går de stubs som genereras av MIDL-kompilatorn igenom den angivna datastrukturen för att fastställa allokeringsstorleken. Stubs gör sedan ett enda anrop för att allokera hela mängden minne som behövs av grafen eller trädet. Ett klientprogram kan frigöra minne mycket mer effektivt genom att göra ett enda anrop till midl_user_free. Prestanda för server-stub ökar dock vanligtvis när du använder nod-för-nod-minnesallokering eftersom serverstubbarna ofta kan använda privat minne som inte kräver några allokeringar.

Mer information finns i Node-by-Node Allocation and Deallocation.