![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 30.07.2012
Сообщений: 13
|
![]()
У меня есть отображение, в котором хранятся указатели на абстрактный класс Node
Код:
Код:
Код:
После наполнения отображения программа выполняет различные действия с этими объектами. При завершении работы программы освобождается память, выделенная для объектов. Код:
В чем может быть проблема, как ускорить освобождение памяти? |
![]() |
![]() |
![]() |
#2 | |
В прострации
Форумчанин
Регистрация: 13.01.2009
Сообщений: 239
|
![]()
Можно попробовать метод clear для map.
Цитата:
Пол-жизни сидючи, в монитор глядючи...
![]() Последний раз редактировалось Stilet; 31.07.2012 в 15:44. |
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 30.07.2012
Сообщений: 13
|
![]()
Это не поможет, скорость удаления будет та же самая.
На сколько я понял, проблема состоит в дефрагментации динамической памяти при создании объектов через new. Может быть лучшим решением будет создать свою кучу для занесения в нее объектов Node1 , Node2 ,Node12 (при завершении работы освободить разом всю память из кучи)? Последний раз редактировалось Rangok; 31.07.2012 в 14:23. |
![]() |
![]() |
![]() |
#4 |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
2Rangok
приведи минимальный, самодостаточный код, на котором проявляется проблема
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
![]() |
![]() |
![]() |
#5 | |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
![]()
А зачем чисто виртуальный деструктор?
Цитата:
Код:
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
|
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 30.07.2012
Сообщений: 13
|
![]() Цитата:
Код:
Базовый класс абстрактный, в нем не содерижтся никаких данных, зачем ему свой деструктор? Кстати если использовать удаление элементов в обратном порядке, то скорость удаления значительно возрастает (раз в 10) Код:
|
|
![]() |
![]() |
![]() |
#7 | |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
![]() Цитата:
Чисто виртуальный деструктор нужен, по моему, для того что бы не забыть переопределить его в наследниках, но и тело у него должно быть.
Знающий не говорит, говорящий не знает (С) Лао Цзы
Последний раз редактировалось Krok27; 31.07.2012 в 15:26. |
|
![]() |
![]() |
![]() |
#8 |
Пользователь
Регистрация: 29.05.2012
Сообщений: 23
|
![]()
попробуйте замерить время в сборке-релизе, в дебаг-сборке при уничтожении памяти много лишних действий может быть(типа всяких проверок и логирований)
|
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 30.07.2012
Сообщений: 13
|
![]() Цитата:
А поподробнее можно? Применительно к Microsoft Visual Studio или QtCreator. |
|
![]() |
![]() |
![]() |
#10 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
![]()
Rangok
Тут и начинаются проблемы. Освобождение памяти занимает огромное время - раз в 100 большее, чем на работу всей программы (включая создание этого отображения). В чем может быть проблема, как ускорить освобождение памяти? Код кривой. 80k элементов - это ни о чём. http://liveworkspace.org/code/cb2109...27981718ce5f94 Искать кривизну, исправлять её. задействовать отладчик и профайлер.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
освобождение динамически выделенной памяти | Einsttein | Общие вопросы C/C++ | 9 | 26.05.2010 15:40 |
Освобождение памяти | Seran4ek | Общие вопросы Delphi | 7 | 21.12.2009 18:07 |
Освобождение памяти | PUH | Помощь студентам | 1 | 22.11.2009 17:14 |
Освобождение памяти | VadEr | Общие вопросы Delphi | 2 | 17.04.2009 22:23 |
Освобождение памяти | AlexandrSid | Общие вопросы Delphi | 3 | 02.02.2009 13:45 |