C - явное восстановление памяти - PullRequest
3 голосов
/ 04 ноября 2011

У меня есть ряд структур данных (деревья, очереди, списки), созданных с помощью процедур динамического выделения (malloc, calloc).При некоторых критических условиях программа должна завершиться.Обход всех объектов для освобождения их памяти занимает много времени.

Безопасно ли избегать обхода всех структур данных непосредственно перед остановкой программы?Если да, применимо ли это ко всем операционным системам и средам (например, многопоточность)?

Ответы [ 4 ]

4 голосов
/ 04 ноября 2011

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

Исключением из вышеперечисленного может быть общая память.

1 голос
/ 04 ноября 2011

Когда программа (т. Е. Процесс) завершается, все локальная память и память кучи автоматически возвращаются.Обратите внимание, что эти области памяти являются специфическими для процесса.Таким образом, вы можете пропустить обход и освобождение непосредственно перед завершением программы.Однако, если программа использует общую / глобальную память, вам необходимо явно это исправить.Наконец, это касается, по крайней мере, Linux / Unix и Windows.Я считаю, что это относится ко всем современным операционным системам.

0 голосов
/ 04 ноября 2011

Вам не нужно free() вся ваша динамически распределяемая память перед завершением программы.Операционная система освобождает всю память, которая принадлежала процессу в любом случае.Он также закрывает все сетевые подключения, которые у вас были открыты.

0 голосов
/ 04 ноября 2011

Краткий ответ: да. В любой современной ОС память является частной для каждого процесса , и, как только процесс завершается, ОС освобождает всю память (если сама ОС не сломана).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...