Heap aufräumen ...



  • Wenn ich mehrfach ein CString-Objekt definiere, oder mit new einem dynamischen
    Datentyp Speicher zuweise, und später mit delete den Speicher wieder freigebe,
    wird dann der Heap wieder aufgeräumt ? Mit einer Carbage-Collection ? Sonst
    würde der Speicher zunehmend fragmentiert. Bei .NET wird der Speicher auf-
    geräumt. Auch bei C++ mit den MFC ?



  • Das hängt IHMO mit dem Betriebssystem zusammen.
    Wenn du den Zeiger wieder mit delete freigibst sollte der beim nächsten GC-Einsatz wieder freigegeben werden.
    Das eigentliche Problem liegt ja darin, dass wie Du schon gesagt hast, der Speicher fragmentiert und durch den GC wieder defragmentiert wird, in sofern man den Speicher auch wieder mit delete Frei gibt.

    Gruß

    Maili



  • GeorgC++ schrieb:

    Wenn ich mehrfach ein CString-Objekt definiere, oder mit new einem dynamischen Datentyp Speicher zuweise, und später mit delete den Speicher wieder freigebe, wird dann der Heap wieder aufgeräumt ?

    Ja.

    GeorgC++ schrieb:

    Mit einer Carbage-Collection ?

    Das gibt es in C/C++ nicht. Sowas gibt es nur in .NET.

    GeorgC++ schrieb:

    Sonst würde der Speicher zunehmend fragmentiert.

    Ganz genau das ist der Fall. Dafür gibt es einige Ansätze, dass dies nicht so schlimm wird (z.B. Low-Fragmentation-Heap).

    GeorgC++ schrieb:

    Bei .NET wird der Speicher aufgeräumt. Auch bei C++ mit den MFC ?

    Nein. Bei C/C++ muss *Du* den Speicher mit delete/free freigeben.



  • Maili, was heisst GC-Einsatz ? Garbage-Collection-Einsatz ?



  • Jochen, kannst Du mir schreiben, wie ein Low-Fragmentation-Heap funktioniert.
    Vielleicht nur kurz, oder Links.



  • GeorgC++ schrieb:

    Jochen, kannst Du mir schreiben, wie ein Low-Fragmentation-Heap funktioniert.
    Vielleicht nur kurz, oder Links.

    Oder Du benutzt einfach mal Google.
    Simon




Anmelden zum Antworten