Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2010, 12:43   #51
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Поясни ...
В вашем примере вы никогда не освобождаете память от объектов в процессе работы программы. Конечно, вы делаете это в конце, но только вот смысла в этом уже нет (память и так будет освобождена).

Это называется "скрытая утечка памяти". Потому что технически, по определению, это не утечка. Но по поведению, эффектам - утечка.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 22.12.2010, 12:46   #52
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

P.S. А потом, будет вопрос "моя программа жрёт память, но leak-и не показываются! Как найти утечки памяти до выхода из программы!".
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 22.12.2010, 13:04   #53
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
эти 4 байта где освобождаются?
В разделе finalization
Цитата:
Конечно, вы делаете это в конце, но только вот смысла в этом уже нет (память и так будет освобождена).
Я могу производить ревизию ссылок при сохранении проекта в файл (в моем случае это не сложно). Могу хранить массив меток в родительском объекте проекта. В конце концов, могу вообще не использовать метки, если они не нужны. Реализовать все это не сложно. Вариаций много, это лишь пример.
Цитата:
Это называется "скрытая утечка памяти". Потому что технически, по определению, это не утечка. Но по поведению, эффектам - утечка.
Тогда RTTI - это тоже технология утечек памяти. Да вообще весь паскаль - одна сплошная утечка. Не знаю, мне даже с моим старьем, которое уже давно пора сдавать, 10МБ не жалко, если это положительно скажется на производительности. Ведь иных, более быстрых, способов проверить "выделенность" я не нашел.
Sibedir вне форума Ответить с цитированием
Старый 22.12.2010, 13:15   #54
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от Sibedir Посмотреть сообщение
Тогда RTTI - это тоже технология утечек памяти.
И в каком месте RTTI выделяет память?

Цитата:
Сообщение от Sibedir Посмотреть сообщение
10МБ не жалко, если это положительно скажется на производительности.
Дело не в 10 мегабайтах. А в том, что у вас рост памяти не ограничен сверху.

Цитата:
Ведь иных, более быстрых, способов проверить "выделенность" я не нашел.
Вам решительно намекают на то (не один я, кстати), что в правильной программе не должно быть вопроса о выделенности памяти. Вы должны знать это явно, а не строить эвристические проверки. Да, вы можете ошибиться в коде и допустить где-то ошибку - скажем, забыть освободить объект, освободить дважды, обратиться после освобождения... много чего можно напутать. Только вот... это - ошибки. Что означает, что их нужно исправить, а не городить огород вокруг в виде эвристических проверок. Для поиска таких ошибок в менеджерах памяти есть отладочные режимы.

Я вам уже предлагал интерфейсы - там такой проблемы в принципе не стоит, но вы же...
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 22.12.2010, 13:49   #55
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Цитата:
И в каком месте RTTI выделяет память?
Да он хранит кучу информации о классах, которой пользуются раз в 100 лет. Знаю, что ее как правило не много, но ведь хранит же гад. И вообще вся оконная система в Delphi начиная с TControl грамоздкая до жути. Не, я непротив. Я к тому, что килобайты никто уже давно не считает.
Цитата:
Дело не в 10 мегабайтах. А в том, что у вас рост памяти не ограничен сверху.
Опять же, поправимо.
Цитата:
Вам решительно намекают на то (не один я, кстати), что в правильной программе не должно быть вопроса о выделенности памяти. Вы должны знать это явно, а не строить эвристические проверки.
Ну возникла у меня такая ситуация, что не не могу я знать наверняка. TSibObject - предок сложных структурированных систем. Они могут быть просто гратескными, но при этом основное требование к ним скорость работы. Вводить ссылки на ссылки, интерфейсы и т.п. не могу. Тут речь пойдет о миллиардах операций за проход.
Ссылка на ссылку - миллиарды лишних тактов процессора.
Интерфейсы - десятки миллиардов.
Sibedir вне форума Ответить с цитированием
Старый 22.12.2010, 13:51   #56
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Интерфейсы - десятки миллиардов.
ничего подобного.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.12.2010, 13:52   #57
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

При каждом
Код:
b.f1 := a;
c.f1 := a;
d.f1 := a;
e.f1 := a;
он счетчик увеличивает. Путь не 10-ки, но всеравно - много.
Потом a может быть уничтожен. b, c, d и e должны об этом знать.
Если
Код:
a := nil;
Объект не уничтожится
Если
Код:
a.Deleting := True
b, c, d и e будут знать, но a продолжает висеть в пямяти, это ли не "утечка" (а может быть большим и таких может быть много).
Если
Код:
FreeAndNill (a);
a уничтожен, но b, c, d и e об этом не знают.

Последний раз редактировалось Sibedir; 22.12.2010 в 14:05.
Sibedir вне форума Ответить с цитированием
Старый 21.03.2011, 10:54   #58
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Да, кстати...
Я всетаки решил менять логику, а точнее, отладить уже используемый механизм зависимостей. Т.е. каждый объект хранит ссылки на зависящие от него объекты или же (как в примере с линиями) имеется объект-связь.

P.S.: Сори за АП. Просто подумал, может будет интересно, что же я там всё-таки надумал.
Sibedir вне форума Ответить с цитированием
Старый 21.03.2011, 11:48   #59
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
если есть еще один указатель на этот же объект, и нет возможности/желания следить за инициализацией/уничтожением объектов, то возникает проблема. Даже если уничтожить и обнилить один из указателей на объект, другие всеравно будут продолжать хранить его старый адрес
На то существует TInterfacedObject, централизующий логику "слежения" за временем жизни объекта.
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неправильно выделена память. С++ Purr Помощь студентам 7 31.10.2010 20:05
Как передвигать объект если он не под формой.VB somebody94 Помощь студентам 1 29.06.2010 10:07
Объект PageSetup. Как проверить пустые ли колонтитулы в документе Word?? =) YaponskijGorodovoj Компоненты Delphi 0 09.06.2010 23:09
динамически выделить память под верхний треугольник квадратной матрицы juventine Общие вопросы C/C++ 2 12.04.2009 13:06
Память, выделяемая под приложение. Altera Компоненты Delphi 4 30.11.2008 18:13