Wie findet man nicht freigegebenen Speicher?



  • Mal angenommen ich habe mit Malloc nen haufen Speicher reserviert und will den nun mit einer Aufräumroutine wieder freigeben.

    Gibt es hier eine Art Hilfsprogramm (bsp. Debugger, VM usw.) das außerhalb meines Programmes eine Liste führt, welche Speicherbereiche mein Programm reserviert hat, so daß ich diese einfacher wieder freigeben kann, falls ich bei der Aufräumarbeit etwas übersehen sollte?

    Also so ne Art Zwischenschicht zwischen Betriebsystem und meiner Anwendung, daß die Speicherreservierungen einfach mitaufzeichnet?





  • Danke für den Tipp.

    Welches graphische Frontend würdet ihr mir für Valgrind empfehlen und ist das überhaupt zu empfehlen oder wäre die Konsolenausgabe von Valgrind besser?



  • PS:

    Ich bräuchte es für Linux.
    In der Paketliste meines Ubuntus gäbe es valkyrie und kcachegrind.
    Welches von beiden ist besser?



  • valgrind. Frontend ist überflüssig.



  • valgrind zieht die Performance von deinem Programm in den Keller und ist auch nicht dafür gedacht, dass es für dich den Speicher aufräumen soll. Es soll dir helfen Speicherlecks zu finden und zu beheben. Wenn du keinen Bock auf manuelle Speicherverwaltung hast, dann brauchst du einen Garbage Collector.



  • Antoras schrieb:

    Es soll dir helfen Speicherlecks zu finden und zu beheben.

    Genau darum geht es mir ja auch.



  • Dann ist valgrind genau das richtigen für dich. 🙂



  • Anfänger 4 schrieb:

    Genau darum geht es mir ja auch.

    Nein, du hast geschrieben:

    welche Speicherbereiche mein Programm reserviert hat, so daß ich diese einfacher wieder freigeben kann, falls ich bei der Aufräumarbeit etwas übersehen sollte

    Valgrind zeigt nur die Stellen, welche nicht freigegeben wurden. Das im Programm zu korrigieren liegt an dir selbst. Wenn du nicht selbst aufraeumen willst, kannst du auch gern einen Garbage Collector als Bibliothek in dein Programm einbinden.

    Zu graphisch: Wie oder warum sollte man "Zeile 320 in main.cpp ... c = malloc ... wurde nicht freigegeben" (oder so) graphisch darstellen.



  • Anfänger 4 schrieb:

    Also so ne Art Zwischenschicht zwischen Betriebsystem und meiner Anwendung, daß die Speicherreservierungen einfach mitaufzeichnet?

    Ich würde genau das machen, hat auch einen grossen Lerneffekt.

    Bei malloc die Adresse in ein Array speichern, bei free wieder aus dem Array löschen, bei Programmende schauen ob das Array leer ist, ggf Fehlermeldung. Erspart viele viele ratlose Stunden.


Anmelden zum Antworten