Czy Ubuntu automatycznie zwalnia pamięć przydzieloną przez program C po zakończeniu programu?

11

Napisałem program w C, zawierający kod przydzielający pamięć za pomocą malloc()funkcji. Jeśli nie zwolnię pamięci za pomocą tej free()funkcji, czy Ubuntu zwolni ją automatycznie?

Ashubuntu
źródło
Nie ma to nic wspólnego z Ubuntu, odpowiedzialnością jądra.
użytkownik
@ użytkownik: Określona wersja Ubuntu musi działać na jednej z wersji jądra Linux. Ma to więc coś wspólnego z Ubuntu, aby wiedzieć, czy jądro, na którym działa, zwalnia pamięć automatycznie, czy nie.
ashubuntu

Odpowiedzi:

16

Tak.

Jądro zwolni wszystkie zasoby przydzielone przez program po zakończeniu programu.

Odbywa się to po tym, do_exit()funkcja zdefiniowana w kernel/exit.custało jego wykonanie; do_exit()wykonanie funkcja sama może być wywołany przez szereg zdarzeń, najczęściej w wyniku jawnego exit()syscall zwanego przez program podczas jego regularnego obliczania lub niejawny exit()syscall zwanego przez program po jego zakończeniu (jak kompilator C kładzie exit()syscall po main()„s powrót). Inne powody obejmują odbiór sygnału lub wyjątku nieprzydatnego / nie do zapomnienia.

Sama do_exit()funkcja wykonuje szereg zadań. Po zakończeniu wykonywania przydzielone zasoby programu są zwalniane przez jądro i zwracane do systemu w celu dalszego wykorzystania.

Źródło

kos
źródło
7
Ale to oczywiście nie usprawiedliwia „zapomnienia” wolnego () ...
Hagen von Eitzen