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.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.