Требуется ли освобождение выделенной памяти при выходе из программы на С - PullRequest
20 голосов
/ 10 апреля 2011

Если я выделил память в моей C-программе с помощью malloc и теперь я хочу выйти, нужно ли освобождать выделенную память или я могу предположить, что, поскольку вся моя программа завершает работу, она будет освобождена ОС?

Я работаю в среде Linux.

Ответы [ 8 ]

20 голосов
/ 10 апреля 2011

Любая современная операционная система будет очищать все после завершения процесса, но, как правило, не стоит полагаться на это.

Это зависит от программы, которую вы пишете.Если это просто инструмент командной строки, который запускается и быстро завершается, вы можете не беспокоиться об очистке.Но имейте в виду, что именно этот образ мыслей вызывает утечки памяти у демонов и долго работающих программ.

8 голосов
/ 13 мая 2011

Это может быть хороший дизайн и очень эффективный способ просто выйти и позволить операционной системе очистить все. Apple OS X теперь делает это по умолчанию : приложения уничтожаются без уведомления, если только приложение не устанавливает флаг «не убивай меня».

Часто освобождение каждого выделения памяти занимает значительное время. Некоторые страницы памяти могли быть выгружены и должны быть прочитаны обратно, чтобы их можно было пометить как свободные. Распределитель памяти должен проделать большую работу по обновлению данных отслеживания свободной памяти. Все эти усилия являются пустой тратой, потому что программа закрывается.

Но это должно быть сделано намеренно, а не потому, что программист потерял след выделенной памяти!

3 голосов
/ 10 апреля 2011

В любом случае он будет освобожден операционной системой после завершения процесса.Так что вам это не нужно, но так как это хорошая практика, почему бы вам не сделать это в любом случае?:)

На самом деле со сложным кодом я бы не рискнул не выпустить что-то, что я не уверен на 100%, что будет бесполезно, потому что программа завершит свою работу позже.Так что для любого минимального сомнения просто освободите его.

2 голосов
/ 10 апреля 2011

Да, вы можете предположить, что.

Хотя рекомендуется освобождать память сразу после того, как она не нужна, даже для программного обеспечения, которое работает только в течение короткого времени.

2 голосов
/ 10 апреля 2011

Операционная система восстановит память, поэтому вам не нужно ее освобождать.

Большинство программ освобождают память, потому что, если вы не освобождаете память, у вас могут возникнуть проблемы, вызванные этими преднамеренными утечками.

1 голос
/ 10 апреля 2011

Всегда освобождайте выделенную память, поскольку операционная система будет занимать меньше памяти без причины. Это очень заметно в небольших операционных системах с небольшим объемом памяти.

1 голос
/ 10 апреля 2011

Linux освободит выделенную память и закроет файловые дескрипторы после завершения процесса.

0 голосов
/ 10 апреля 2011

Операционная система освободит память, однако рекомендуется освобождать объекты, если вы ожидаете, что они выйдут за рамки, прежде чем вы выделите что-то еще. Тем не менее, вы можете более или менее полагаться на завершение программы, чтобы справиться с управлением памятью.

...