Qt, увеличение памяти с mtrace
У нас есть многопоточное приложение C++ qt (4.8.1) на встроенной платформе linux arm со многими потомками qgraphicsitem. При вызове их метода update() mtrace показывает прирост использования памяти, около 16-18 байт на каждое обновление. Наблюдая за приложениями VSZ (с помощью ps или топовых команд), он также постоянно увеличивается. Если мы запускаем приложение в valgrind --tool=memcheck, и приложение нормально завершается, мы не видим "точно потерянные" блоки.
Если мы закомментируем вызовы update (), mtrace больше не отображает неосвобожденные области.
Возможно ли, что в Qt есть "все еще доступные" и постоянно растущие блоки памяти, перераспределенные области, векторы STL и т. Д.? Если да, то как мы можем их периодически очищать?
Структура программы выглядит следующим образом:
int main( int argc, char* argv[] ) {
// new thread creations, initializations, qt object creations
...
mtrace();
while ( runEnabled ) {
// this is where new events arrive, and the graphics is updated
...
}
muntrace();
// cleanups, desctructions
...
}
Таким образом, mtrace отслеживает только активную часть, которая должна работать месяцами в нашей встроенной среде.
Спасибо Даниэль