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³yw sterowania C\C++ - pytanie

Freeradio 28 Dec 2006 17:20 824 2
  • #1
    Freeradio
    Level 15  
    Witam, mam pytanie:
    - Po zakoñczeniu procesu mojego programu przez taskmgr, w jakie miejsce przep³yw sterowania przechodzi ??, czy od razu nastêpuje powót do systemu, czy jest podobnie jak z nieobs³u¿onym wyj±tkiem - zanim nast±pi powrót do systemu jest wywo³ywana jeszcze jaka¶ funkcja??
  • Helpful post
    #2
    Akane
    Level 27  
    Nieobs³u¿ony wyj±tek, 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êki, za wyczerpuj±cy wyk³ad :D