Это не обязательно. Но если вы используете valgrind
или подобный инструмент, вы скоро обнаружите, что оставленная вся ваша память сваливает вас с ложными предупреждениями.
Что касается Linux, то куча увеличивается с помощью системного вызова sbrk
. Это увеличивает общее пространство памяти процессора на большой блок за раз (поэтому для обеспечения достаточного пространства для многих malloc
с необходим только один sbrk
). Когда процесс завершается, ядро освобождает всю память, выделенную sbrk
. Вот почему вы в безопасности. Ядро также закроет все файловые дескрипторы, открытые этим одним процессом.
Есть несколько проблем, которые могут возникнуть. Если ваш процесс когда-либо fork
с в неподходящий момент, любые дескрипторы открытого файла будут продублированы. Я видел этот манифест в виде TCP-соединения, загадочно зависшего заживо после смерти оригинального процесса, что является противным Кроме того, существуют другие ресурсы, которые просто не ограничены областью действия процесса, поэтому они не будут возвращены после завершения процесса. Сюда входят сегменты разделяемой памяти, временные файлы, именованные каналы и сокеты UNIX и, возможно, множество других механизмов IPC.
В итоге? Память в порядке. Файловые дескрипторы обычно в порядке. Некоторые из более эзотерических функций IPC будут ужасно нарушены, если их не очистить.