Использование памяти приложением C ++ в Windows - PullRequest
0 голосов
/ 15 октября 2010

У меня есть приложение, которое выполняет симуляцию Монте-Карло. Для каждого прогона файл размером 12 МБ загружается в std::vector<MyData>. На объект, который загружает и хранит данные, ссылается символ boost::shared_ptr, который удаляется из стека после завершения цикла.

Я вижу, что использование памяти приложением в диспетчере задач Windows увеличивается до 1 ГБ (после 80-90 запусков), но затем оно обычно уменьшается до 50 МБ (и начинает расти для следующих запусков). Поэтому мне интересно, если это утечка памяти или просто нормальное поведение. Должен ли я сделать что-нибудь, чтобы явно освободить память в векторе или что-то еще?

Спасибо за подсказки,

Philipp

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Спасибо всем за ваши советы.Оказалось, что это на самом деле была утечка памяти, вызвавшая отсутствие виртуального деструктора моего класса AbstractSensorDataSource, который хранил загруженные данные.

0 голосов
/ 15 октября 2010

Это на самом деле звучит правильно.

90 * 12 = 1080 MB = 1.0546875 GB

Вы должны рассмотреть возможность использования другого распределителя или уменьшения количества раундов.
Если вы хотите явно освободить память, вы должны либо использовать обычный указатель, либо вызвать функцию reset() в shared_ptr.
Используйте профилировщик, как уже упоминалось, чтобы увидеть, действительно ли другой распределитель положительно влияет на распределение памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...