Russian Qt Forum
Ноябрь 24, 2024, 16:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: postEvent - Утечка памяти  (Прочитано 6693 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #15 : Октябрь 06, 2014, 06:46 »

Я уже писал, что я замерил память в запущенном приложении, в котором отправка сообщений не производилась (просто закоментировал код, который формирует сообщения).
Вы не хотите замечать, что у вас помимо отправки происходит еще и создание объектов сообщений, причем всех сразу.
А это минимум 24 байта на объект Event -> 24 * 5000000 = 120 Мб
Плюс указатели в очереди на эти объекты, на 32 битной платформе, еще 20 Мб.

На размещение этих объектов событий у ядра получена память (вы смотрите именно на нее), но после удаления всех объектов, память кучи может не возвращаться ядру, а использоваться для дальнейшего выделения.
« Последнее редактирование: Октябрь 06, 2014, 07:31 от Old » Записан
Dodge
Гость
« Ответ #16 : Октябрь 06, 2014, 20:25 »

Я уже писал, что я замерил память в запущенном приложении, в котором отправка сообщений не производилась (просто закоментировал код, который формирует сообщения).
Вы не хотите замечать, что у вас помимо отправки происходит еще и создание объектов сообщений, причем всех сразу.
А это минимум 24 байта на объект Event -> 24 * 5000000 = 120 Мб
Плюс указатели в очереди на эти объекты, на 32 битной платформе, еще 20 Мб.

На размещение этих объектов событий у ядра получена память (вы смотрите именно на нее), но после удаления всех объектов, память кучи может не возвращаться ядру, а использоваться для дальнейшего выделения.

Спасибо за мнение, но я вынужден возразить.
Во первых, если следовать Вашей логике, то при генерации сообщений в бесконечном цикле, объем используемой памяти должен стабилизироваться на конкретном значении, которое будет зависеть от скорости их обработки. Но по факту это не так, происходит постоянный прирост используемой памяти.
Во вторых, практически любой менеджер задач под линукс (я использовал htop), показывает объем реально занимаемой памяти и объем зарезервированной памяти. Так вот прирост отмечается именно в реально используемой. Отсюда я и сделал вывод об утечке.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #17 : Октябрь 06, 2014, 20:34 »

Попробуйте после первой обработки всех событий запустить и обработать еще столько же событий. С замерами памяти до и после.

И еще раз хочу отметить, что пока выполняется функция spam сообщения не обрабатываются, цикл обработки сообщений еще не запущен. Поэтому сообщения просто набиваются в очередь, поэтому расход памяти только увеличивается.

Во вторых, практически любой менеджер задач под линукс (я использовал htop), показывает объем реально занимаемой памяти и объем зарезервированной памяти.
Нет, они показывают объем распределенной виртуальной и физической памяти. Физическая память распределятся под кучу, в которой и сохраняются объекты Event. В дальнейшем эта память освобождается и может повторно использоваться для хранения других объектов/данных.
Физическая память распределяется процессу, он там может расположить кучу для хранения данных, но куча эта может быть свободной для хранения данных процесса.
Именно поэтому на форуме 100500 раз писали, что не нужно пытаться отследить состояние кучи по системных мониторам.
« Последнее редактирование: Октябрь 07, 2014, 08:04 от Old » Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.116 секунд. Запросов: 23.