| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Утечка памяти |
| Автор: Coocky 16.3.2005, 14:36 |
| Вот раньше,когда начинал прогать,скурпулезно удалял все указатели.Теперь прог8и выросли и их количество тоже.Надоело.. А ну ка возрадите во мне эту традицию..Приведите примеры,засорения памяти,так как проблем пока не возникало. Или это все понты,типа "хороший стиль программирования" |
| Автор: LuckLess 16.3.2005, 14:47 |
| Писал както прогу... она строила бинарное дерево возможных ходов в одной игре , чтобы на ее основе сделать наилучший выбор хода... и сделал ошибку в вункции VirtuallFree()... в итоге она не удаляла старые деревья из памяти.. и после минуты игры санимала 1.5 ГБ памяти.. что приводило к нереальным тормозам системы..... |
| Автор: Vyacheslav 16.3.2005, 15:40 |
| Очень просто. Бегло просмотрев Ваш стиль программирования при таком раскладе ни один разработчик программного обеспечения не возмет Вас на работу. Дело не в памяти, а в стиле кодирования. Если уж программист не в состоянии уследить за своевременным освобождением памяти, то вопрос о качестве решения более сложных вопросов просто не возникнет. К тому же меня настараживает "скурпулезно". Обычно при правильном подходе к делу за этим не требуется особого пригляда. А если для программиста особый пригляд нужен и утомителен, то ... возникают вопросы в его компетентности. При этом можно даже не упоминать о разработке серверных приложений, которые призваны крутиться годами... |
| Автор: np9mi7 16.3.2005, 17:56 | ||||
большое количество "прог", признак их простоты, поверь чуть возмешся за человеческий проект, сразу задашся вопросами эфф. упр. ресурсами... это целая наука, интелектуальные указатели...итд... |
| Автор: En_t_end 16.3.2005, 20:44 |
| Я действую по принципу : "Выделил память - освободи, когда обьект уже не нужен". Причем освобождаю всегда вручную, не надеясь на якобы встроенные средства. |
| Автор: Coocky 16.3.2005, 23:11 | ||||||||||
arajan
Ну вот хотелось бы увидеть(услышать) пример глюкала
Большое количество не прог,а указателей.
Уже не один за плечами
А вот это уже интересней.А где можно посмотреть? LuckLess Пример понятен.Спасибо.
Я сам себе директор |
| Автор: S.A.P. 17.3.2005, 00:08 | ||||
Читай Рихтера, только они умные называются, вроде. RAdmin ссылку на книгу давал в комп. лите.
|
| Автор: Coocky 17.3.2005, 00:11 |
| Perchilla Понял,старик,убедил А так вот никому нельзя было обьяснить.Действительно,понытно,чем долговечней,тем проблемней |
| Автор: np9mi7 17.3.2005, 08:52 |
| ДА с учетом даже обычного блокнота мне кажеться имеет смысл работь с ресурсами окуратнее.... http://www.google.ru/search?hl=ru&q=smart+%D1%83%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr= |
| Автор: pablo 17.3.2005, 10:02 |
| Не своевремменное освобождение памяти - это не только осточник трудно улавимых ошибок, плохого стиля программирования, но и причина не понимания программирования вообще. Никому (программерам) неахота писать глючные проги, которые жрут ресурсы и стопорят систему. |
| Автор: np9mi7 17.3.2005, 10:08 |
| pablo ? best regals... |
| Автор: Vyacheslav 17.3.2005, 11:19 | ||||
Вручную? Зачем? Если есть возможность, то пусть у меня голова болеть не будет
Сколько памяти здесь утекло? |
| Автор: Coocky 17.3.2005, 22:42 | ||
| arajan неплохо.Спасибо.Интересно будет почитать pablo
Спасибо Займусь вышиванием. Короче спасибо всем,и тем кто подсказал,и тем кто любит измерять время выполнения своих функций,и хвастаться бабушке с мамой,или изобретать свои методы сортировок,думая что он велик,изобревши велосипед,с одним колесом |
| Автор: chipset 18.3.2005, 00:19 | ||
Есть такая книга: http://anatolix.naumen.ru/Books/CPP4RealProgrammers?v=rw4, этим умным указателем чуть ли ни вся она посвящена.. Интересно, а как ты на STL кодил без них? Зайди - http://www.firststeps.ru/theory/c/r.php?2 и ещё по оглавлению поброди.. Если не хочешь освобождать память, тебе прямая дорога в .NET и Java. . |
| Автор: DENNN 18.3.2005, 11:15 | ||
Гораздо интересней как на STL вместе с ними кодить можно? |
| Автор: Borisff2003 18.3.2005, 11:26 | ||
А контейнер из стандартных умных указателей(auto_ptr ) вообще лучше не создавать(читать Мейерса), а то там семантика такая, что при присваивании указателя, меняется владелец. |
| Автор: Coocky 18.3.2005, 21:12 | ||
| Вот так и кодил. А выражение
Встречал,но ни разу не пользовался Добавлено @ 21:16 Я ввобще шаблонами редко пользуюсь Все что надо есть в МФС.А динамичексого массива и списка хвтает с головой. Но если столкнусь,всегда смогу заглянуть в книгу Добавлено @ 21:18 Кстати.Еще вот вопросик. А как лучше пользоваться времеными обьектами(вспомагательными)-обьявлять в классе и хранить до конца проги или в функции,и использовать только когда она работает? |
| Автор: chipset 18.3.2005, 21:21 | ||
Для этого делаются контейнеры умных указателей, чтобы предотвратить замусоривание памяти... |
| Автор: Coocky 18.3.2005, 21:24 | ||
Ну и понеслись в лес Хорошо таким в консоли баловаться.А когда 10-12 классов в проге,да и МФС,забываешь о всех премудростях Добавлено @ 21:25 А на вопросик-то еще не ответили,про обьекты.А ведь тоже память жрут,хоть и разок при открытии |
| Автор: chipset 18.3.2005, 21:35 | ||||
Как раз наоборот. Добавлено @ 21:37
Зависит от того - нужен ли он тебе в течении всей жизни программы, или только на короткий срок, сам понимаешь Старайся в разные темы писать... |
| Автор: Coocky 18.3.2005, 21:40 | ||||
chipset
А если их много,и нужны они на протяжении жизни проги,но не всегда chipset
Пример ? |
| Автор: chipset 18.3.2005, 21:45 | ||||
В сложных программах - больше классов - больше память замусоривается при неправильном использовании.. Добавлено @ 21:46
Зависит от конкретной задачи. |
| Автор: Coocky 18.3.2005, 21:51 | ||
chipset
Это намек на шаблоны? А не легче ли через поиск все new найти,и сопоставить им соответсвующие delete |
| Автор: chipset 18.3.2005, 22:04 | ||
Не забывай что после того как ты сделаешь delete, другой класс может рассказать тебе про Access Violation. |
| Автор: Coocky 18.3.2005, 22:06 |
| Вот это меня и убивает при удалении указателей. Как впрочем запарки могут быть и с шаблонами и тем более с контейнерами указателей. |
| Автор: chipset 18.3.2005, 22:09 |
| Coocky, не всё так страшно.. Просто надо правильно проектировать програму и выявлять области жизни обьектов |
| Автор: Coocky 18.3.2005, 22:15 | ||
chipset
Короче,завязали с темой А то уже наговорили про меня целую кучу Кстати,а нет ли литературы(опять же в электронке) как правильно делать проги(не программировать А то начинаю с интерфейса под ключ.затем пишу код для одного действия.затем понимаю,что что-то упустил,кидаюсь туда.забывая зачем делала первое.Ну а в конце свожу все к обновлению кнопок на тулбаре |
| Автор: chipset 18.3.2005, 22:24 | ||
Вкратце: 1) Требования - определяешь что тебе надо будет от программы, конкретно. 2) Спецификация - разбиваешь требования на отдельные, логические модули. 3) Проектирование - на бумажке или в UML, по спецификации строишь иеархию обьектов и то как они пересекаются. 4) Кодинг - запускаешь студию и начинаешь лениво набивать классы, в промежутках играя в Quake3:Arena. 5) Переделывание проекта нахрен - после того как ты понимаешь что третья часть была полным бредом и всё надо делать 100% наоборот, переделываешь её вышеуказанным методом. 6) Интерфейс - ваяешь сам, или заставляешь дизайнеров сваяивать интерфейс и прибиндить его к событиям твоего кода. 7) Переделывание интерфейса 8) Тестирование - мучаешь свою программу, используя изощренные садистские методы, пока не добьешься стабильной работы. 9) Можно называть программу pre-alpha 0.01 и начинать тестирование на живых людях (до-поры до -времени). |
| Автор: Coocky 18.3.2005, 22:36 |
| И так по твои пунктам делаю- 1.Заказчики добавляют каждый раз новое 2.Не делаю.Но может в уме 3.Да у меня и ручки-то нет 4.Делаю.Надо поставить еще QUAKE 5.Переделывю после того,как понимаю,что 70%-бред. 6.Единственое,что хорошо получается 7.Неа сразу и под ключ 8.Что-то всегда зупускаю все равно,потому и бегаю потом к заказчикам и храню сорцы 9.Да.Обычно типа Демо-версия Ну а если серьезно? |
| Автор: chipset 18.3.2005, 22:48 | ||||||
Я на полном серьёзе, если выкинуть Quake.
Значит надо делать гибкую структуру и драть с заказчиков деньги. Добавлено @ 22:48
|
| Автор: np9mi7 19.3.2005, 23:01 | ||||
|