Megosztás a következőn keresztül:


Stub-Allocated pufferek

Ahelyett, hogy külön hívást kényszerítenél a fa vagy a gráf minden csomópontjára, a csonkokat az adatok méretének kiszámítására, valamint a memória lefoglalására és felszabadítására irányíthatja a midl_user_allocate vagy midl_user_freeegyetlen hívásával. Az ACF attribútum [allocate(all_nodes)] irányítja a csonkokat, hogy egyetlen hívásban lefoglalják vagy felszabadítják az összes csomópontot a felhasználó által biztosított memóriakezelési függvényeknek.

Egy RPC-alkalmazás például a következő bináris fa adatstruktúrát használhatja:

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

Az erre az adattípusra alkalmazott ACF attribútum [allocate(all_nodes)] az ACF typedef deklarációjában a következőképpen jelenik meg:

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

A [lefoglalás] attribútum csak mutatótípusokra alkalmazható. Az [lefoglalás] ACF attribútum a DCE IDL-hez készült Microsoft-bővítmény, ezért nem érhető el, ha a MIDL /osf kapcsolóval fordít. Ha [allocate(all_nodes)] alkalmaz egy mutatótípusra, a MIDL fordító által létrehozott csonkok a megadott adatstruktúrán haladnak át a foglalás méretének meghatározásához. A csonkok ezután egyetlen hívást kezdeményeznek a gráf vagy fa számára szükséges teljes memória lefoglalásához. Az ügyfélalkalmazások sokkal hatékonyabban szabadíthatják fel a memóriát azáltal, hogy egyetlen hívást intéznek midl_user_free. A kiszolgálócsomópont teljesítménye azonban általában nő csomópontonkénti memóriafoglalás használatakor, mivel a kiszolgálócsomópontok gyakran használhatnak olyan magánmemóriát, amely nem igényel foglalást.

További információ: csomópontonkénti kiosztás és felszabadítás.