2009-05-14 7 views
9

Duplikat: What REALLY happens when you don’t free after malloc?Co dzieje się z pamięcią, która nie została zwolniona po zakończeniu programu?

Powiedzmy, na przykład:

int main() 
{ 
    char* test = new char[50000]; 
    return 0; 
} 

Co dzieje się z przydzielonej pamięci po programie skończył? Czy natychmiast zostanie zwolniony dla innych aplikacji? A może po jakimś czasie? A może na zawsze stracił system? Czy może zostać zamieniony na dysk, aby nigdy nie powrócić do pamięci RAM? A może coś zupełnie innego?

Chciałbym wiedzieć, co dzieje się na głównych 3 OS-ów: Windows (XP, a nawet, jeśli są jakieś różnice), Linux, Mac OS X.

Odpowiedz

2

ona odchodzi, tak jak w system operacyjny czyści to. Dowolna pamięć, o którą program prosił, system operacyjny wie o tym, więc gdy program zostanie zamknięty, dowolna pamięć używana przez niego zostanie zwolniona i będzie dostępna do użytku przez inne programy. Wierzę, że stanie się dostępny natychmiast.

1

OS powinien odzyskać go dla pamięci systemowej gdy proces używając jej zakończeniu.

1

W systemie Windows pamięć zostaje zwolniona przez system operacyjny po zamknięciu programu. Jeśli jest to duża ilość pamięci, może to zająć trochę czasu.

O ile pamiętam, od kiedy pracowałem z różnymi odmianami Uniksa, to samo dotyczy wszystkich systemów operacyjnych.

0

Odpowiedź będzie oczywiście zależała od systemu operacyjnego, ale ogólnie system operacyjny przejdzie przez i zamiatać pozostałą alokowaną/zmapowaną pamięć po zakończeniu programu. W przypadku Linuksa oczyszczenie zostanie zakończone przed zakończeniem procesu (wchodzi w stan Z).

6

W każdym systemie operacyjnym z MMU (w tym Unix, Linux, OSX i rodzina Windows NT) proces ma strukturę danych, która służy do konfigurowania odwzorowań stron dla MMU. Po zakończeniu procesu mapowanie jest zwalniane, a strony są dodawane do puli bezpłatnej systemu operacyjnego.

Na platformach O/S bez pamięci chronionej, takich jak DOS lub niektóre systemy operacyjne czasu rzeczywistego, pamięć może wymagać jawnego zwolnienia, a pula O/S mogłaby potencjalnie przeciekać pamięć, jeśli nie została poprawnie uporządkowana.

3

Wszystkie te momenty zostaną utracone w czasie ...
jak łzy w deszczu

- Roy Batty w Blade Runner

To zależy w dużej mierze od systemu operacyjnego. Większość systemów operacyjnych zwolni pamięć dla ciebie, inne nie. Jeśli opracujesz dla systemu operacyjnego komputer stacjonarny teraz na kilka dni, możesz być całkowicie pewien, że pamięć zostanie zwolniona. Tak jest w przypadku systemów wbudowanych lub telefonów komórkowych, w których pamięć faktycznie gubi się do następnego ponownego uruchomienia systemu operacyjnego.

Powiązane problemy