Чи автоматично Ubuntu звільняє пам'ять, виділену програмою C, коли програма закінчується?


11

Я написав програму C, що містить код, що виділяє пам'ять за допомогою malloc()функції. Якщо я не звільняю пам'ять за допомогою free()функції, чи випустить її Ubuntu автоматично?


Це не має нічого спільного з Ubuntu, відповідальність за його ядро.
користувач

@user: Конкретна версія Ubuntu повинна працювати над однією з версій ядра Linux. Тож це має щось спільне з Ubuntu, щоб дізнатися, ядро, яке воно працює, звільняє пам'ять автоматично чи ні.
ашубунту

Відповіді:


16

Так.

Ядро звільнить усі ресурси, виділені програмою після закінчення програми.

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

Сама do_exit()функція виконує ряд завдань. Після закінчення його виконання виділені ресурси програми звільняються ядром і повертаються в систему для подальшого використання.

Джерело


7
Але це, звичайно, не привід для того, щоб "забути" безкоштовно () ...
Хаген фон Ейтцен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.