Освобождение переменных из памяти

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Освобождение переменных из памяти

Сообщение poiuyt555 » 28.01.2013 15:44:45

Здравствуйте.
Во многих примерах программирования после использования переменная или массив освобождается (free freeandnil и т.д.).
Обязательно ли это делать или при закрытии программы вся память освобождается сама?
poiuyt555
новенький
 
Сообщения: 51
Зарегистрирован: 12.09.2011 07:45:51

Re: Освобождение переменных из памяти

Сообщение Mr.Smart » 28.01.2013 15:56:14

При завершении приложения система (ОС) сама освободит память.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Освобождение переменных из памяти

Сообщение SSerge » 29.01.2013 04:41:47

Mr.Smart писал(а):При завершении приложения система (ОС) сама освободит память.


Освободит.
Но. Например, вы захотите использовать свой кусок кода еще раз, куда-то его скопируете и при этом напрочь забудете, что память вы не освобождали, потому что - см. выше.
Потом будете долго искать, где у вас память бесследно исчезает. :D

Поэтому, лучше все таки освободить самостоятельно, а не полагаться на действия компилятора.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Освобождение переменных из памяти

Сообщение bormant » 29.01.2013 09:26:17

Дело не столько в копировании, сколько в повторном исполнении участка кода с локальными переменными-указателями на выделенную память.
Код: Выделить всё
Procedure x;
Var p: PChar;
Begin
  GetMem(p, 2048*1024);
  ...
  Free(p);
End;
Если не освобождать выделенную память, на каждый вызов x будут утекать 2Мб, если внутри есть код, бросающий исключения, без try/finally утечка сохраняется в случае исключения.
Аватара пользователя
bormant
постоялец
 
Сообщения: 408
Зарегистрирован: 21.03.2012 11:26:01


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 252

Рейтинг@Mail.ru
cron