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