Ich bemerkte einen sehr interessanten Befund. Ich habe meine Anwendung getestet, bei der ein benutzerdefiniertes GUI-Element verwendet wurde, das durch Daten aktualisiert wurde, die von einer externen Quelle kamen. Die Aktualisierung der GUI erfolgte unter Verwendung einer Slot-Funktion (Qt-spezifisches Detail), wenn Daten auf dem seriellen Port eintrafen. Jetzt kamen die Daten mit einer Rate von 10 Paketen pro Sekunde, d. H. Die Aktualisierungs-GUI-Funktion wurde 10 Pakete pro Sekunde aufgerufen. Dies verlangsamte die Anwendung und führte zu einer ständigen Vergrößerung des Speicherbedarfs. Es begann bei 60 MB und stieg in ein paar Stunden auf 65 MB.C++/Qt-Speicher Leck?
Meine Schlussfolgerung war, dass die Aktualisierung der GUI langsam ist und wenn ein Steckplatz für die Aktualisierung 10 Mal pro Sekunde aufgerufen wird, die Steckplatzaufrufe auf lange Sicht in die Warteschlange gestellt werden und somit die Reaktionszeit der Anwendung beeinträchtigen.
Ich löste dieses Problem durch Zwischenspeichern des eingehenden Werts und Aktualisieren der GUI, wenn der eingehende Wert geändert wurde.
Ich habe verschiedene kostenlose Tools wie valgrind-memcheck, Leak-Checker ausprobiert, aber die Ergebnisse sind nicht hilfreich, in der Tat Leck-Checker findet das Leck nicht, aber meine Programme Speichergröße steigt ständig. Bedeutet dies, dass es wegen der Schlange der Signalschlitzverbindung ist, weil GUI Aktualisierung von sich aus langsam ist?
Jetzt hier liegt das Problem. Das Aufspüren von Speicherlecks ist hart genug und wenn Qt involviert ist, wie kann ein glückloser Programmierer sich des Problems sicher sein, d. H. Ob es tatsächlich ein Speicherleck oder eine Schlange von Signalschlitzverbindungen ist?
Mögliche dupe von http://stackoverflow.com/questions/1186379/detecting-memory-leaks-in-c-qt-combine von demselben Benutzer –
Es ist anders Neil, die frühere Frage war eigentlich eine De-facto-Erinnerung Dieses Posting sollte dieses Problem hervorheben, da viele Leute wie ich nicht wissen werden, dass die Erhöhung der Speichergröße durch das Einreihen von Signal-Slot-Verbindungen verursacht werden kann. – rocknroll
Valgrinds Massiv gibt nichts? –