Надо ли освобождать память

Вопросы программирования на Free Pascal, использования компилятора и утилит.

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

Ответить
Akmal
новенький
Сообщения: 10
Зарегистрирован: 19.03.2006 09:02:56

Надо ли освобождать память

Сообщение Akmal »

Всем привет.

В своей программе на FP я использую динамический массив

var
arr_cl: array of array[0..5] of string;
n1: integer;

далее в програме делаю так

n1:=100;
SetLength(arr_cl, n1);

Так вот надоли перед окончанием освобождать память в системе и если надо, то как это делается?
:?:
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Вообще, локально выделенная память освобождается ОС (если речь идет о Win32, Linux и т.д.), НО в других системах, особенно в экзотических, этого может и не быть. Кроме того, менеджер кучи может использовать и глобально выделенную память (в FPC это не так, но как знать — вдруг захочется менеджер кучи поменять). В общем, лучше таки освобождать. В случае динамических массивов — SetLength(arr,0).
GrayEddy
постоялец
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Сообщение GrayEddy »

Finalize(arr)
Юра
постоялец
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение Юра »

Вообще-то компилятор сам вставляет код освобождения динамических массивов и строк при выходе из области их видимости. Так что с этим все в порядке.

Освобождать нужно память, выделенную с помощью GetMem или New.
GrayEddy
постоялец
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Сообщение GrayEddy »

Вот именно, что "вообще-то". Никогда не доверяй компилятору освобождение памяти, если он не оснащен сборщиком "мусора".
А вообще-то, явное освобождение памяти - это признак хорошего воспитания и принадлежность к аристократии :)
Юра
постоялец
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение Юра »

Еще раз повторяю. Delphi и FPC всегда освобождают память динамических массивов и строк (про экзотические случаи я не говорю). Поэтому если освобождать их явно, устанавливая нулевую длину, то это будет не хоршим тоном, а простой тратой времени и увеличением кода.
Ответить