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