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?
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?
Odpowiedzi:
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.c
ustał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.