Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить, есть ли утечка памяти после работы проги 
:(
    Опции темы
S.A.G.
Дата 16.4.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Есть прога, она юзает объекты и др. пользовательские струтуры хранящиеся в куче. Как определить все ли они удаляються после завершения работы проги т.е. как определить факт утечки памяти?


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
skyboy
Дата 16.4.2007, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



Цитата(S.A.G. @  16.4.2007,  21:33 Найти цитируемый пост)
объекты и др. пользовательские струтуры хранящиеся в куче

располагаются в адресном пространстве процесса. Если в твоем случае приложение == программа == процесс, то после завершения процесса(программы) вся выделенная ей память(в т.ч. "heap" - "куча") будет возвращена ОС. Т.о. "глобальной" утечки памяти быть не может(разве что ты внедрялся в чужое адресное пространство и "гадил" там - в том же explorer.exe или ещё где... но, видимо, в твоем случае такого не было). А утечка есть только в пределах твоего процесса. С другой стороны, если твое приложение сожрет всю доступную адресуемую память, то ничего хорошего в этом не будет, хоть память и освободится с закрытием твоего приложения... так что проверять надо. На это дело есть модуль MemCheck
PM MAIL   Вверх
S.A.G.
Дата 16.4.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Ну если используються связные списки.. никаких левых наворотов. Если память в любом случае освобождаеться то зачем ее освобождать явно?


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
skyboy
Дата 16.4.2007, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



Цитата(S.A.G. @  16.4.2007,  22:05 Найти цитируемый пост)
Если память в любом случае освобождаеться то зачем ее освобождать явно? 

если ты никогда-никогда не задействуешь свой класс в программе, где объекты такого класса будут создаваться/уничтожаться пачками - не пиши особождение памяти в деструкторе.
если твой класс гарантированно(хотел бы знать того, кто дает такие гарантии) будет использоваться в приложении только в виде единственного экземпляра на протяжении всей работы и максимально занимает 1-2 Кб памяти - не ищи утечки.
НО! Если ты можешь предсказать такие условия работы своего класса/приложения, то ты - бог  smile 
если тебе так неохота чистить за собой память, что ты против соблюдения правил приличия(вдруг твой класс/функцию/код будет использовать кто посторонний?) и даже просто здравого смысла(если у тебя в цикле создаются объекты, скажем, в количестве 1000000 штук и каждый вызывает утечку памяти на мегабайт, может случиться out of memory) - то пользуй лучше другие языки, среда которых подразумевает автоматизированную сборку мусора(Java, .Net - группа, реализации языков функционального программирования), либо используй smart pointers вместо "обычных" указателей.
PM MAIL   Вверх
S.A.G.
Дата 16.4.2007, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



У меня в объекте есть поля которые являються указателями на списки разных размеров. Списки эти не слишком большие и я хотел бы проверить все ли они хорошо убиваються в деструкторе. Как вижу убивать их необязательно... :( Столько сил и мозгов угрохал чтобы написать вродебы корректное удаление. Хотелось бы чтобы это было действительно так.


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
skyboy
Дата 17.4.2007, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



Цитата(S.A.G. @  16.4.2007,  22:36 Найти цитируемый пост)
Столько сил и мозгов угрохал

ты что, приносил кусочки мозга в жертву компу? smile Это же опыт! А корректное удаление я бы советовал-таки сделать...
PM MAIL   Вверх
MetalFan
Дата 17.4.2007, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



Цитата(skyboy @  16.4.2007,  23:19 Найти цитируемый пост)
используй smart pointers

это хто такие?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Yanis
Дата 17.4.2007, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(MetalFan @  17.4.2007,  08:58 Найти цитируемый пост)
это хто такие? 

Это auto_ptr в С++. Не знаю насколько это удобно и возможно в Delphi smile


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
S.A.G.
Дата 17.4.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Цитата(skyboy)
ты что, приносил кусочки мозга в жертву компу? smile

Почти smile


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
skyboy
Дата 17.4.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



Цитата(Yanis @  17.4.2007,  07:47 Найти цитируемый пост)
Это auto_ptr в С++. Не знаю насколько это удобно и возможно в Delphi

черт! я просто на С++ в то время писал....
Значит, другой совет: наследуй классы не от TObject, а от TInterfacedObject - как я понимаю, даже без внедрения интерфейсов там реализован механизм подсчета ссылок и когда на область памяти(объект) больше никто не ссылается, объект уничтожается автоматически.

Добавлено через 54 секунды
а вообще - хватит лениться и вперед - писать деструкторы!  smile 
PM MAIL   Вверх
Alexeis
Дата 17.4.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(skyboy @  17.4.2007,  11:16 Найти цитируемый пост)
Значит, другой совет: наследуй классы не от TObject, а от TInterfacedObject - как я понимаю, даже без внедрения интерфейсов там реализован механизм подсчета ссылок и когда на область памяти(объект) больше никто не ссылается, объект уничтожается автоматически.

  Нет что-то путаешь, такое есть только для строк и динамических массивов. Даже себе не представляю как можно в Delphi сделать auto_ptr... ведь тут нет перегрузки, хотя что-то в 2007 уже есть. Но как определить что указатель уничтожен? На счет интерфейсов, так счетчик ссылок работает только у интерфейса. Это если создать объект как интерфейс... и то интерфейс нужно занулить, чтобы уничтожить ссылку, пока этого не будет сделано ничего не произойдет. А если указатель создан в стеке, то по выходу из процедуры никто не заботится чтобы занулять область памяти стековых переменных, просто смещают указатель стека и все. 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
skyboy
Дата 17.4.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 4
Всего: 260



Цитата(Alexeis @  17.4.2007,  11:25 Найти цитируемый пост)
Нет что-то путаешь, такое есть только для строк и динамических массивов. 

да :( запутал...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.