problem: konstant steigender speicherbedarf



  • hi folks!

    habe ein programm, welches ziemlich große buffer vom typ unsigned char benutzt.
    sind insgesamt 4 buffer, alle so um die 800 kB groß.

    die buffer werden am anfang alle ge-malloc'd, und ab da wird in sie nur noch geschrieben oder gelesen.

    wenn ich dass programm jetzt einige minuten laufen lasse, dann steigt der speicherbedarf pro sekunde um ca. 2 MB (sagt zumindest mein windows taskmanager).

    worauf muss ich schauen, um dieses problem zu beseitigen?

    ach ja, ich nutze die libbz2 in dem programm, um den inhalt eines buffers in einen anderen zu komprimieren. könnte es sein dass diese library ihren internen speicher nicht richtig free'd?

    und noch was anderes:

    wenn ich eine funktion habe, so etwa:

    void tuwas() {
    
      char einString[255] = "";
      return;
    }
    

    ist der speicher von dem string nach dem return immer noch reserviert, oder wird der automatisch wieder freigegeben?

    vielen dank im voraus,

    ---loki



  • nach dem verlassen solltest du auf den string nicht mehr zugreifen.
    als "static" sollte es kein problem sein.

    zur ersten frage: gib code



  • naja, ich darf den code leider nicht veröffentlichen, und er wäre auch viel zu groß...

    vielleicht weiss ja jemand eine möglichkeit, wie mein programm während der laufzeit seine eigene RAM-nutzung mitloggen kann, so könnte ich dann herausfinden wo immer mehr RAM beansprucht wird und dort dann einen auszug machen. ich habe schon selber gesucht, und die einzige möglichkeit sehe ich eigentlich in den funktionen der libBZ2....



  • Du weißt aber schon, dass du den allozierten Speicher auch wieder freigeben musst?



  • logo. allocated wird in main(), zu beginn. danach wird absolut nichts mehr allocated, und am ende von main wird es mit free(buffername) wieder freigegeben.



  • nimm doch nen debugger und verfolge den programmfluss

    oder nimm nen profiler und guck so mal



  • Du könntest auch mal valgrind benutzen, wenn Du Dein Programm alternativ auch unter Linux compilieren kannst, der fängt sehr viele potentielle Memory Leaks ab und zeigt sie an.



  • mit debuggern kenne ich mich leider nicht aus, alles was ich bisher davon gesehen habe war komplex und nirgends gabs sowas wie tutorials etc...

    das mit dem profiler klingt interessant, wo bekommt man einen her?

    das mit valgrind muss ich auch mal probieren. linux ist kein prob, weil die app sehr portabel ist....



  • also wenn du GCC benutzt, da gibts einen gdb (gnu debugger)
    der ist ziemlich einfach.

    profiler... hm, von gnu gibts einen aber ka wie der heißt. gprof oder sowas



  • jo, habe mal den gprof profiler von mingw32 getestet, funktioniert auch ganz gut, nur zeigt der mir nur an, wieviel zeit jede funktion in anspruch nimmt, aber nichts über memory usage... muss mir dann wohl doch den GDB näher anschauen...





  • danke, schaut gut aus.


Anmelden zum Antworten