Speicherfreigabe ??



  • Hallo zusammen!

    Im Task-Manager unter Windows NT kann man den Prozessnamen
    und die dazugehörige Speichernutzung einsehen.

    Meine Frage ist: Wieso gibt Borland den Speicher nicht frei, sondern schraubt nur 'nach oben'?

    Beispiel:
    Stringliste mit new erstellen => genutzter Speicher wird erhöht
    Stringliste mit delete wieder freigeben => Speichernutzung bleibt gleich!?

    Weiteres Beispiel:

    TStringList* t[105];
        int x = 0;
    
        for (x=0;x<100;x++)
        {
            t[x] = new TStringList();
            t[x]->Add("TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST TEST...");
        }
    
        for (x=0;x<100;x++)
        {
            if (t[x])
            {
                delete t[x];
                t[x] = NULL;
            }
        }
    
        // wieso wird der speicher hier nicht wieder zu 100% freigegeben?
    

    Any ideas? 🙄

    JOJO



  • den ersten array hast du gelöscht oder nicht ? 🙂 quizfrage 🙂



  • ja, es geht mir aber um den speicher im heap (free memory)

    JOJO



  • Wie misst du den freien Speicher? Schaust du dir die Zahl im Taskmanager an? Die hinkt immer etwas hinterher.

    -junix



  • Ich schau im Task-Manager bei "Prozesse" zu meiner BCB-Exe. War der Meinung dass er zumindest beim Speicher holen sofort hochspringt, werde das aber nochmals beobachten...

    JOJO



  • Ja aber soviel mir ist, führt freigegebener Speicher nicht dazu, dass die Anzeige sofort sinkt. Lass die applikation noch nen moment offen und öffne vielleicht ne andere dazu... dann sollte spätestens die Anzeige sinken.

    -junix



  • Du kannst auch was anderes ausprobieren:
    Führ die reserviererei aus -> Speicher steigt
    Gib den Speicher wieder frei -> Speicher sinkt nicht
    Reserviere erneut -> Speicher bleibt gleich
    Gib den Speicher wieder frei -> Speicher sinkt nicht
    Warte etwas oder sorg dafür, dass eine andere Appliaktion Speicher braucht -> Speicher _sollte_ sinken.

    -junix



  • ...ist leider nicht so, der speicher steigt nur an, wird aber nicht mehr freigegeben... 😞

    gibt es einen unterschied zwischen new und malloc bzgl. "speicherfreigabe"???

    JOJO

    [ Dieser Beitrag wurde am 16.05.2003 um 09:26 Uhr von jojo73_de editiert. ]



  • new ruft malloc auf und reserviert speicher, gibt ihn also nicht frei!



  • new ruft malloc auf... schon klar, aber mit delete bzw. free() müsste er wieder freigegeben werden!
    JOJO



  • also ich hab das mal in anderen Größenverhältnissen probiert, und ab ca. 150-180 MB gibt er den Speicher wieder frei... oder wenn du die Anwendung beendest...


Anmelden zum Antworten