Udostępnij za pośrednictwem


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].)