Frage

Ich habe ein sehr einfaches C ++ - Programm geschrieben, um 600 Video-Frames in einem Multi-Thread-Code zu lesen. Das Problem ist, dass sich die freie Speichergröße nicht ändert! Ich verwende QT 4.8 und Ubuntu 12.04 Meine Laptop-Speichergröße beträgt 8 GB, also habe ich keinen Speichermangel.

Jeder Frame beträgt 1,8 MB, so dass die Gesamtgröße 600 * 1,8 MB= 1080 MB

beträgt.

Bevor das Programm ausgeführt wird, lautet mein Speicher-freier Größe 6,8 GB, aber nach dem Ausführen meines Codes und nach dem Ausführen des Codes sehe ich, dass die kostenlose Speichergröße von 5,9 GB ist, also sehe ich, dass ein riesiges Speicher im Programm ist. Ich habe meinen Code 1000-mal ausgeführt und sah nie, dass mein Programm abstürzt oder Probleme auftreten, so dass der Code in Ordnung ist.

mein Code:

generasacodicetagpre.

im_loader.h

generasacodicetagpre.

mainwindow.cpp

generasacodicetagpre.

MainWindow.h

generasacodicetagpre.

Definitionen.h

generasacodicetagpre.

Ich habe in einigen Artikeln gelesen, in denen die OpenCv C ++-Version das Speichermanagement unterstützt, sodass wir keine Sorge um Speicherlecks machen müssen.

Ich vermisse ich hier etwas? Ich habe auch diese Fragen gelesen, aber keiner von ihnen hat für mich gearbeitet dieses und Dieses

Nur ein Beitrag amüsierte mich ist so und ließ mich denken, wenn ich dieses Problem in meinem Code habe, aber ich konnte nicht herausfinden. Dies ist der Link

Ich werde bei Bedarf etwas anderes bereitstellen.

bearbeitet:

Es ist sehr interessant, dass, wenn ich in meiner ImageLoader-Klasse eine Verzögerungsfunktion in meiner ImageLoader-Klasse füge, kurz nach dem Lesen eines jeden Rahmens hinzugefügt wird, verringert die Menge an Speicherlecks !!!

mein neuer IM_LOADER.CPP

generasacodicetagpre.

Hinzufügen einer 100 ms-Verzögerung reduziert den Speicherleckage auf nur 100 Mega-Bytes anstelle von 1 Gigabyte !!!

War es hilfreich?

Lösung

endlich habe ich herausgefunden, was dieses Speicher leckte ... Wie Sie in der IM_LOADER-Klasse sehen können, und speziell Run () -Funktion habe ich diesen Codeblock:

generasacodicetagpre.

Da OpenCV einen Referenzzählverfahren für CV :: MAT-Objekt verwenden, wird das Eingabebild in die DataA-Variable kopiert und dann in PD_Classifier.Pd_classifier wird gelöscht, aber DataA-Nr.Wenn ich diese Zeile entfernt habe, und den Code dazu ändern, wurde das Problem gelöst:

generasacodicetagpre. 0

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top