у нас есть многопоточное приложение 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 отслеживает только активную часть, которая должна работать месяцами в нашей встроенной среде.
Спасибо Даниэль
Задача ещё не решена.
Других решений пока нет …