Ubuntu автоматически освобождает память, выделенную программой на C, когда программа завершается?

11

Я написал программу на C, содержащую код, распределяющий память, используя malloc()функцию. Если я не освобожу память с помощью этой free()функции, Ubuntu освободит ее автоматически?

ashubuntu
источник
Это не имеет ничего общего с Ubuntu, ответственность его ядра.
пользователь
@user: Определенная версия Ubuntu должна работать поверх одной из версий ядра Linux. Так что он как-то связан с Ubuntu, чтобы знать, освобождает ли ядро, на котором он работает, память автоматически или нет.
ashubuntu

Ответы:

16

Да.

Ядро высвободит все ресурсы, выделенные программой после ее завершения.

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

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

Источник

кос
источник
7
Но это, конечно, не оправдание для того, чтобы "забыть" о свободе () ...
Хаген фон Айцен