Среда Crouton не освобождает память после выхода из программы?
Я новичок в использовании Crouton. Я пытаюсь использовать его для некоторой практики программирования на C в среде Linux. Каждый раз, когда я запускаю программу, которая использует malloc(), я получаю ошибку утечки памяти на х количество байтов. Ошибка утечки памяти исчезает, когда я явно освобождаю выделенную память. Это проблема Crouton или проблема Ubuntu в целом?
Есть ли способ исправить это, чтобы мне не приходилось каждый раз явно освобождать выделенное пространство? Я понимаю, что free() - это хорошая практика кодирования и так далее, но мне было просто интересно, есть ли способ, чтобы выделенная память автоматически освобождалась после выхода.
2 ответа
В Linux (и в большинстве современных многозадачных ОС), когда процесс завершается (или завершается, например, сигналом), все его ресурсы освобождаются ядром ОС, включая его виртуальное адресное пространство.
Так что, конечно, можно забыть free
до выхода из кучи памяти, и многие (но не все) программы делают это.
Если вы разрабатываете приложение, вы все равно можете free
каждая динамически выделяемая зона памяти при выходе. Это облегчает использование инструментов обнаружения утечек памяти, таких как valgrind (но требует определенных усилий по разработке и даже времени выполнения).
C
является языком ручного управления памятью, это означает, что вам нужно освободить память, выделенную вами вручную, в отличие от сборки мусора. Вы можете использовать такие функции, как atexit()
чтобы облегчить процесс освобождения памяти при выходе из программы, но я не рекомендую это лично как хорошую практику программирования. Если вы программируете с C
язык программирования, вы должны научиться освобождать память с free()
,