Потребление ресурсов MALLOC в приложении C - PullRequest
4 голосов
/ 25 ноября 2010

Я пишу приложение на C и использую malloc для создания данных в куче. Теперь, когда приложение активно, эти данные всегда постоянны, поэтому я никогда не «освобождаю» данные Malloc.

У меня вопрос: будет ли эта память автоматически освобождаться после завершения работы приложения, или я должен выполнить free () вручную по завершении моего приложения?

Ответы [ 3 ]

5 голосов
/ 25 ноября 2010

Это определяется реализацией.Строго следуя стандарту C, вы должны free все, что у вас malloc 'до завершения работы приложения.

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

В качестве стиля, попробуйте free каждый выделенный блок.Это дает вам привычку писать чистый код и предотвращать утечки памяти.

2 голосов
/ 25 ноября 2010

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

Обратите внимание, что потребовалось некоторое время, чтобы придумать эту абстракцию, но это действительно хорошая песочница для системы. Фактически, процессы уничтожения даже используются в качестве крайней меры, чтобы попытаться исправить ошибочные программы, которые имеют утечку или сниженную производительность, поскольку они выполняются в течение нескольких дней (он вызывается с красивым именем «Восстановление процессов» , даже существует в конференциях и журналах, но на самом деле является признаком плохого дизайна или кодирования).

0 голосов
/ 25 ноября 2010

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

...