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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
admsasha
14 / 14 / 4
Регистрация: 11.06.2011
Сообщений: 212
#1

Не чиститься память при разрушении класса - C++

08.02.2014, 08:04. Просмотров 229. Ответов 3
Метки нет (Все метки)

Сделал небольшой пример tcp сервера.
http://rusfolder.com/39763465

Он принимает строки, разделенные \n и пересылает их обратно. Если слать небольшими порциями пакеты, то всё работает нормально. Если я вышлю очень большую порцию пакета, например "test\ntest\ntest\n" и так. несколько тысяч, cервер заполняет массив writeBuffer данными и память раз растает до 100MB, это нормально и понятно. НО когда сессия завершается эта память не очищается. По выводу "~session" я увижу, что деструктор сработал, но все теже 100MB как были так и висят. valgrind никакой утечки памяти не показал. Если повторно подключиться и выслать такой же большой пакет, то память просумируется. И уже будет 200MB занятой памяти. Почему память не очищается при завершении session ? Массив writeBuffer должен очищаться при уничтожении session или я ошибаюсь ? Почему память разрастается, я понимаю, но почему не очищается нет...


Код примера тестирования.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  try {
        boost::asio::io_service io_service;
 
        tcp::socket s(io_service);
        tcp::resolver resolver(io_service);
        boost::asio::connect(s, resolver.resolve({"localhost", "1234"}));
 
        char request[max_length]="test\n";
        size_t request_length = std::strlen(request);
        char reply[max_length];
        std::string buffer="";
        for (int i=1;i<10000000;i++){
            boost::asio::write(s, boost::asio::buffer(request, request_length));
        }
 
    }catch (std::exception& e){
        std::cerr << "Exception: " << e.what() << "\n";
    }
OS: kernel 3.10.19
gcc версия 4.7.3 20121001
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2014, 08:04     Не чиститься память при разрушении класса
Посмотрите здесь:

Как выделить память под динамические переменные при создании класса? - C++
В прошлой теме ответ получил, но не до конца. Вопрос такой, как выделить память под динамические переменные? Вот часть кода ...

Память класса - C++
у меня есть кусок программы, скажите пожалуйста могу ли я присвоить переменной state_ другое значение и почему комментарий про объединение...

Динамическая память и конструктор класса - C++
Подскажите, почему Marshroute *objects2 = new Marshroute(for_loop); компилятор ругается на (for_loop), если я хочу запустить конструктор не...

Как выделить память для класса - C++
Привет, я пишу библиотеку управления памятью. На данный момент я выделяю память вот так void * __cdecl MyAlloc(size_t size) { void *...

Деструктор класса. Как правильно очистить память? - C++
Добрый день! Написал прогу бинарного дерева поиска, все работает, но нужен совет как убрать за собой, тобесь очистить память во избежания...

Как выделить динамически память для данных класса - C++
Как выделить динамически память для данных класса ? class circle { double x,y,r; public:void In(); void Out(); ...

Как динамически выделить память для конструкторов класса? - C++
подскажите как динамически выделить память для конструкторов класса? class circle { double x,y,r; public: void...

Возможно ли корректно увеличить память для свойства класса, заданного указателем? - C++
Всем привет. Вопрос скорее &quot;из интереса&quot;, но меня он мучает! 1. Объект класса создан в куче (через new) 2. В классе есть свойство...

Можно ли записывать объекты класса string в память, чтоб потом их прочитать? - C++
Создал класс, который содержит много объектов класса string, но что то не так как надо. В debug режиме удаётся прочитать и вывести, но...

Ошибка при вызове метода класса в методе другого класса - C++
Господа программисты, возникла такая проблема. При вызове метода класса в методе другого класса выходит такая ошибка &quot; нестандартный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
09.02.2014, 15:40     Не чиститься память при разрушении класса #2
Цитата Сообщение от admsasha Посмотреть сообщение
Почему память не очищается при завершении session ?
То, что память осталась занята процессом, это решение ОС. Т.к. если память уже была выделена однократно, есть вероятность, что она потребуется еще раз. Чтобы не гонять ее туда-сюда, она резервируется за процессом. Чтобы понять что конкретно происходит надо ознакомиться с реализацией менеджера памяти конкретной версии ОС.
DU
1481 / 1057 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
09.02.2014, 16:03     Не чиститься память при разрушении класса #3
покажите код серверной части чтоли. может у вас буфер живет вне сессии и при повторном коннекте
продолжает разрастаться.
admsasha
14 / 14 / 4
Регистрация: 11.06.2011
Сообщений: 212
09.02.2014, 16:34  [ТС]     Не чиститься память при разрушении класса #4
DU, А разве я не приложил ссылку на полный код серверной части ?
Yandex
Объявления
09.02.2014, 16:34     Не чиститься память при разрушении класса
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru