Утечка памяти в программе

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

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

Re: Утечка памяти в программе

Сообщение Sergei I. Gorelkin » 15.02.2011 22:16:32

Иван прав: оператор ничем не отличается от обычной функции, кроме синтаксиса.
В зависимости от платформы и типа результата он (результат) может возвращаться в скрытом параметре, который действительно будет куда-то указывать. Тем не менее, это не var, а out параметр, его значение на входе в функцию не определено.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Утечка памяти в программе

Сообщение Иван Шихалев » 15.02.2011 22:49:44

Sergei I. Gorelkin
А почему такой странный порядок освобождения по счетчику ссылок? viewtopic.php?f=1&t=6753&st=0&sk=t&sd=a#p50621
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Утечка памяти в программе

Сообщение Sergei I. Gorelkin » 16.02.2011 01:01:35

Временные переменные управляемых типов освобождаются в блоке try..finally, чтобы не было утечек в случае исключения. Этот блок один на всю процедуру. Кроме того, компилятор вырабатывает некоторый избыток (по сравнению с Дельфи) временных переменных, которые иногда держат ссылки до выхода из процедуры.
Да, это не так, как в Дельфи, и по этому поводу периодически возникает много флейма...
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: Утечка памяти в программе

Сообщение Иван Шихалев » 16.02.2011 01:12:37

Ну, судя по результатам, при вычислении следующего выражения временные переменные предыдущего тоже освобождаются... А вот когда подходящего выражения нет, остаются до конца процедуры. Может, есть возможность вызывать какую-нибудь процедуру a-la Collect(), чтобы в явном виде освобождать?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Утечка памяти в программе

Сообщение Sergei I. Gorelkin » 16.02.2011 10:21:38

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

Возможности освобождать временные переменные в явном виде нет.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Пред.

Вернуться в Free Pascal Compiler

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

Сейчас этот форум просматривают: Yandex [Bot] и гости: 6

Рейтинг@Mail.ru