Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zamiast wymuszać odrębne wywołanie dla każdego węzła drzewa lub grafu, można kierować wycinki, aby obliczyć rozmiar danych oraz przydzielić i zwolnić pamięć, wykonując jedno wywołanie w celu midl_user_allocate lub midl_user_free. Atrybut ACF [allocate(all_nodes)] kieruje wycinki do przydzielania lub zwalniania wszystkich węzłów w jednym wywołaniu do funkcji zarządzania pamięcią dostarczonych przez użytkownika.
Na przykład aplikacja RPC może używać następującej struktury danych drzewa binarnego:
/* 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;
Atrybut ACF [allocate(all_nodes)] zastosowany do tego typu danych jest wyświetlany w deklaracji typedef w ACF jako:
/* ACF file fragment */
typedef [allocate(all_nodes)] P_TREE_TYPE;
Atrybut [przydziel] można zastosować tylko do typów wskaźników. Atrybut [przydziel] ACF jest rozszerzeniem firmy Microsoft do języka IDL DCE i, w związku z tym, nie jest dostępny, jeśli kompilujesz z przełącznikiem MIDL /osf. Gdy [przydziel(all_nodes)] jest stosowany do typu wskaźnika, wycinki generowane przez kompilator MIDL przechodzą przez określoną strukturę danych w celu określenia rozmiaru alokacji. Następnie wycinki tworzą pojedyncze wywołanie, aby przydzielić całą ilość pamięci wymaganej przez graf lub drzewo. Aplikacja kliencka może znacznie wydajniej zwolnić pamięć, wykonując jedno wywołanie midl_user_free. Jednak wydajność wycinków serwera jest zwykle zwiększana w przypadku korzystania z alokacji pamięci węzła po węźle, ponieważ wycinki serwera mogą często używać pamięci prywatnej, która nie wymaga alokacji.
Aby uzyskać dodatkowe informacje, zobacz Alokacja węzła po węźle i Deallocation.