Форум программистов, компьютерный форум CyberForum.ru

Очень долгое освобождение динамически выделенной памяти - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ utf-8 <-> int32 http://www.cyberforum.ru/cpp/thread625681.html
Есть строка s формата utf-8 длины l и число n типа int32 или uint32, которое является уникальным идентификатором строки s. Какие существуют алгоритмы или готовые библиотеки для нахождения s, зная n и нахождения n, зная s. И какое будет максимально возможное значение l?
C++ Бесплатные тесты по С++ на Brainbench На http://www.brainbench.com бесплатно доступен тест по С++. Тест не сложный, думаю, многим будет интересно попробовать свои силы и узнать слабые места. Вроде как подобные тесты иногда даже "засчитываются" работодателями, так что прохождение может иметь практический смысл. http://www.cyberforum.ru/cpp/thread623156.html
[IDA PRO] Интересное выражение C++
Реверсил драйвер. Наткнулся на выражение: v1 = &Irp1->Tail.Overlay.UnkUnion.CurrentStackLocation; *v1 = 12; Собственно как его понимать? Что значит ? (CurrentStackLocation - cтруктура) И чему второе присваивает? Спрашиваю, т.к. нет возможности проверить на практике. Имеется только код.
Ссылки С++ C++
На днях я испытал состояние когнитивного диссонанса и одновременно разочарования в себе и своём любимом языке программирования. Всё время, сколько я использовал плюсы я был уверен, что ссылки - это какие-то виртуальные объекты, указывающие на реальные только формально, т.е. я представлял себе передачу параметра по ссылке в функцию - как расширение области видимости объекта на эту функцию (с...
C++ Подскажите прицип работы программы http://www.cyberforum.ru/cpp/thread622167.html
Добрый день! Сразу прошу прощения за офф-топ, к сожалению не знаю в какую ветку даже обратиться, поэтому пишу здесь. Подскажите, нужна программа с работой по принципу "компьютер-сервер-компьютер" Грубо говоря что то в очень упрощенном виде Reuters Т.е. пользователь на своем компьютере в программе создает запрос - отправляет его он-лайн другому пользователю - пользователь ему отвечает Это...
C++ Мастер-классы, сборы, обмен знаниями в Мск Братва. Есть желание продвинуться в знаниях по всему, что связано с С++: новый стандарт, библиотеки OpenCV, boost, С++ в embedded, поиск сложных багов. В свою очередь могу чем-то поделится (более 6 лет опыта). И так, вижу два формата: 1. Мастер-класс в виде: один ведущий, все остальные слушают, делают практические мини-задания, просветляются. 2. Тусовка сишников (С/С++), обмен мнениями,... подробнее

Показать сообщение отдельно
Rangok
Сообщений: n/a

Очень долгое освобождение динамически выделенной памяти - C++

30.07.2012, 20:56. Просмотров 2084. Ответов 23
Метки (Все метки)

Все никак не могу разобраться с одной проблеммой!
У меня есть отображение, в котором хранятся указатели на абстрактный класс Node
C++
1
 typedef  map <int num ,Node*> NodeCont;
.
C++
1
2
3
4
5
6
7
8
9
//Абстрактный класс узла
class Node
{
public:
    virtual ~Node()=0;
////
....
////
};
При работе программы создаются объекты классов-потомков класса Node (Node1, Node2, Node12) с помощью new, и в NodeCont заносятся указатели на них (всего заносится около 80 тысяч элементов).
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
typedef set<NodeCont::iterator,CompareObj> LinksCont;
 
//Узел 1
class Node1:virtual public Node
{
protected:
     LinksCont next_links;
public:
    ~Node1(){}
////
....
////
};
 
 
//Узел 2
class Node2:virtual public Node
{
protected:
     LinksCont prev_links;
public:
    ~Node1(){}
////
....
////
};
 
//Узел 12
class Node12:private Node1,public Node2
{
public:
    ~Node12(){}
////
....
////
};
Размеры контейнеров типа LinksCont в узлах Node1, Node2, Node12- небольшие, в среднем 2-3 элемента.

После наполнения отображения программа выполняет различные действия с этими объектами.
При завершении работы программы освобождается память, выделенная для объектов.
C++
1
2
3
4
5
6
7
8
    NodeCont::iterator iter=nodes.begin();
    NodeCont::iterator iter_end=nodes.end();
    while(iter!=iter_end)
    {
        //удаляем узел
        delete (*iter).second;
        ++iter;
    }
Тут и начинаются проблемы. Освобождение памяти занимает огромное время - раз в 100 большее, чем на работу всей программы (включая создание этого отображения).
В чем может быть проблема, как ускорить освобождение памяти?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru