Задать вопрос
@Anvario0

Зачем освобождать память в C?

Изучаю на данный момент ЯП C и сейчас на теме "указатели".
Сказано, что указатель необязательно должен ссылаться на существующую переменную, можно просто выделить ему (указателю) память с помощью функции malloc() и дальше с этой памятью работать. Но далее было сказано, что после того, как мы всё нужное с этой памятью сделали, её нужно снова освободить с помощью функции free(), но не было объяснения почему.
Поэтому я и хотел спросить, зачем освобождать память?
  • Вопрос задан
  • 449 просмотров
Подписаться 1 Простой 3 комментария
Решения вопроса 1
Vamp
@Vamp
Потому что неосвобождённая память остаётся занятой даже после выхода указателя за пределы области видимости. В итоге если вы будете только аллоцировать память, но не освобождать её, то рано или поздно программа сожрёт всю память в системе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
HemulGM
@HemulGM
Delphi Developer, сис. админ
Если ты выделил память, она остается выделенной всегда. До завершения программы. Даже, если ты уже не знаешь где, куда и зачем выделил. Эта память будет числиться за твоей программой и занимать место.
Соответственно, если ты будешь бесконтрольно выделять память и не освобождать её, свободная память кончится и, тут два варианта:
1. Твоя программа выдаст ошибку Out of memory, при очередном выделении памяти (если твоя программа собрана под 32бита)
2. ОС будет пытаться выделять память, "сбрасывая" другие программы в файл подкачки, что приведёт к огромным тормозам, а затем, когда и там всё кончится, твоя программа вылетит с той же ошибкой.
Ответ написан
Комментировать
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Потому что это называется "утечка памяти", когда программа выделяет ее, но не освобождает. Если это мелкая программа, то похрен - программа кончилась, вся ее память освободилась. Но тут нарабатывается плохая привычка и в итоге мы получаем что-то типа Firefox, который жрет память тоннами и не освобождает. А когда в системе кончается реальная память - начинает работать менеджер страничного обмена (свопа), который вытесняет неиспользуемые страницы на диск - это во-первых жрет ресурсы, во-вторых диск бестолково гоняет. А когда кончается и страничная память (обьем свопа) - система тупо встанет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы