매우 흥미로운 사실을 발견했습니다. 나는 외부 소스에서 오는 데이터에 의해 업데이트되고있는 맞춤형 GUI 요소와 관련된 애플리케이션을 테스트하고 있었다. GUI의 업데이트는 시리얼 포트에 데이터가 도착할 때마다 슬롯 (Qt 특정 정보)을 사용하여 수행되었습니다. 이제 데이터가 초당 10 패킷 씩 올라갔습니다. 즉, 업데이트 GUI 기능은 초당 10 패킷으로 호출되었습니다. 이로 인해 응용 프로그램 속도가 느려지는 동시에 메모리 사용량이 지속적으로 증가하는 결과를 낳았습니다. 몇 시간 만에 60MB에서 시작하여 65MB로 증가했습니다.C++/Qt 메모리 누출?
내 결론은 GUI 업데이트가 느리고 업데이트를위한 슬롯이 초당 10 번 호출 될 때 슬롯 호출이 장기 실행에 대기하므로 응용 프로그램 응답 시간이 저하된다는 것입니다.
들어오는 값을 캐싱하고 들어오는 값이 변경되면 GUI를 업데이트하여이 문제를 해결했습니다.
valgrind-memcheck, leak checker와 같은 다양한 무료 도구를 사용해 보았지만 결과가 유용하지 않습니다. 실제로 누수 검사기가 누수를 찾지 못했지만 프로그램 메모리 크기가 계속 증가하고 있습니다. GUI 업데이트가 본질적으로 느리기 때문에 신호 슬롯 연결 대기열로 인한 것입니까?
여기에 문제가 있습니다. 메모리 누수를 추적하는 것은 충분히 어렵습니다. Qt가 관련되어 있다면 어떻게 불행한 프로그래머가 문제를 확신 할 수 있습니까? 즉 실제로 메모리 누수가 발생하거나 신호 슬롯 연결 대기열에 걸리면 어떻게됩니까?
동일한 사용자가 http://stackoverflow.com/questions/1186379/detecting-memory-leaks-in-c-qt-combine의 가능한 속임수 –
다른 점 Neil, 이전 질문은 실제로 사실상의 메모리였습니다. 누출은이 문제가 나를 좋아하는 많은 사람들이 메모리 크기의 증가가 신호 슬롯 연결 대기열로 인한 것임을 알지 못하기 때문에이 문제를 부각시키기위한 것이 었습니다. – rocknroll
Valgrind의 대산 괴는 아무것도주지 못합니까? –