Я написав програму C, що містить код, що виділяє пам'ять за допомогою malloc()
функції. Якщо я не звільняю пам'ять за допомогою free()
функції, чи випустить її Ubuntu автоматично?
Я написав програму C, що містить код, що виділяє пам'ять за допомогою malloc()
функції. Якщо я не звільняю пам'ять за допомогою free()
функції, чи випустить її Ubuntu автоматично?
Відповіді:
Так.
Ядро звільнить усі ресурси, виділені програмою після закінчення програми.
Це робиться після того, як do_exit()
функція, визначена в kernel/exit.c
, припинила її виконання; do_exit()
саме виконання функції може бути викликано цілим рядом події, найчастіше з допомогою явного системного exit()
виклику називається програмою під час її регулярного обчислення або неявного системного exit()
виклик називається програмою після її закінчення (як C компілятор поміщає exit()
системний виклик після main()
«з повернення). Інші причини включають в себе отримання незмінного / не ігнорованого сигналу або винятку.
Сама do_exit()
функція виконує ряд завдань. Після закінчення його виконання виділені ресурси програми звільняються ядром і повертаються в систему для подальшого використання.