Podsumowanie reguł alokacji pamięci
Poniższa tabela zawiera podsumowanie kluczowych reguł dotyczących alokacji pamięci.
MIDL, element | Opis |
---|---|
Wskaźniki najwyższego poziomu [ ref] | Musi być wskaźnikami innych niż null. |
Wartość zwracana przez funkcję | Nowa pamięć jest zawsze przydzielana dla wartości zwracanych wskaźnika. |
[ unikatowy, ] lub [ ptr, out] wskaźnik | Niedozwolone przez MIDL. |
Non-top-level [unikatowy, w, się] lub [ptr, in, out] wskaźnik, który zmienia się z wartości null na niepustą | Wycinki klienta przydzielają nową pamięć na kliencie po powrocie. |
Non-top-level [unikatowy, w, ] wskaźnik, który zmienia się z wartości innej niż null na null | Pamięć jest oddzielona na kliencie; Aplikacja kliencka jest odpowiedzialna za zwalnianie pamięci i zapobieganie wyciekom. |
Non-top-level [ptr, w, się] wskaźnik, który zmienia się z wartości innej niż null na null | Pamięć zostanie oddzielona na kliencie, jeśli nie zostanie aliasowany; Aplikacja kliencka jest odpowiedzialna za zwalnianie i zapobieganie wyciekom pamięci w tym przypadku. |
[ref] wskaźniki | Warstwa aplikacji klienckiej zwykle przydziela. |
Bez wartości null [w, ] wskaźnik | Wycinki próbują zapisać w istniejącym magazynie na kliencie. Jeśli [ciąg] i rozmiar zwiększa się poza rozmiar przydzielony na kliencie, spowoduje to zwrócenie błędu GP. |
W poniższej tabeli przedstawiono podsumowanie wpływu kluczowych atrybutów IDL i ACF na zarządzanie pamięcią.
Funkcja MIDL | Problemy z klientem | Problemy z serwerem |
---|---|---|
[ przydziel(single_node)], [allocate(all_nodes)] | Określa, czy jedno lub wiele wywołań jest wykonywane w funkcjach pamięci. | Tak samo jak klient, z wyjątkiem pamięci prywatnej, często można używać do przydzielania (single_node) [in] i [in,out] danych. |
[przydziel(bezpłatnie)] lub [allocate(dont_free)] | (Brak; wpływa na serwer). | Określa, czy pamięć na serwerze jest zwalniana po każdym zdalnym wywołaniu procedury. |
atrybuty tablicy [ max_is] i [ size_is] | (Brak; wpływa na serwer). | Określa rozmiar pamięci do przydzielenia. |
[ byte_count] | Klient musi przydzielić bufor; nie przydzielone lub zwolnione przez wycinki klienta. | Atrybut parametru ACF określa rozmiar buforu przydzielonego na serwerze. |
[ enable_allocate] | Zwykle żaden. Klient może jednak używać innego środowiska zarządzania pamięcią. | Serwer używa innego środowiska zarządzania pamięcią. RpcSmAllocate należy użyć do alokacji. |
[ w]atrybut | Aplikacja kliencka odpowiedzialna za przydzielanie pamięci dla danych. | Przydzielone na serwerze przez wycinki. |
[ się] atrybut | Przydzielone na kliencie przez wycinki. | [wskaźnik]-only musi być [ref] wskaźnik; przydzielone na serwerze przez wycinki. |
[ ref] atrybut | Pamięć, do których odwołuje się wskaźnik, musi być przydzielana przez aplikację kliencka. | Wskaźniki referencyjne najwyższego poziomu i pierwszego poziomu zarządzane przez wycinki. |
[ unikatowy atrybut] | Wartość null do wartości null może spowodować oddzieloną pamięć; Wartość null do wartości innej niż null powoduje, że wcięcie klienta wywołuje midl_user_allocate. | (Wpływa na klienta). |
[ ptr] atrybut | (Zobacz [unikatowy].) | (Zobacz [unikatowy].) |