Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Przep造w sterowania C\C++ - pytanie

Freeradio 28 Dec 2006 17:20 824 2
  • #1
    Freeradio
    Level 15  
    Witam, mam pytanie:
    - Po zako鎍zeniu procesu mojego programu przez taskmgr, w jakie miejsce przep造w sterowania przechodzi ??, czy od razu nast瘼uje pow鏒 do systemu, czy jest podobnie jak z nieobs逝穎nym wyj徠kiem - zanim nast徙i powr鏒 do systemu jest wywo造wana jeszcze jaka funkcja??
  • Helpful post
    #2
    Akane
    Level 27  
    Nieobs逝穎ny wyj徠ek, jak i poprawne zakonczenie programu powoduje oddanie paleczki do kernel32 lub ntdll, gdzie jest zwalniana pamiec procesu przeznaczona na stos kazdego watku, heap procesu, bloki TLS kazdego watku, nie zwolnione uchwyty... a nastepnie wszystkie dll'e sa powiadamiane o fakcie zakonczenia procesu i ewentualnie sa wyladowywane z pamieci gdy ilosc referencji spadnie do zera.
    Pozatym, gdy dll uzywa globalnych zmiennych lub ktos lub cos zapisze cokolwiek do obszaru pamieci gdzie jest dll, to system alokuje po kryjomu dodatkowa pamiec na te zmiany, aby inne aplikacje nie widzialy tych zmian.

    Wymuszajac zamkniecie procesu przez np. TerminateProcess, prawie wszystkie wymienione powyzej punkty sa omijane, wiec pamieci zaczyna powoli brakowac (jedyna szkoda)

    Na koncu paleczka przechodzi do kernela gdzie proces i thready sa usuwane z tablicy aktywnych, zwolniona pamiec jest oznaczana jako "free" w deskryptorach, i dzieje sie jeszcze sporo innych zeczy, jakto w systemie.
  • #3
    Freeradio
    Level 15  
    Dzi瘯i, za wyczerpuj帷y wyk豉d :D