Wie wird freier Speicher erkannt (Interessefrage)



  • Hallo zusammen,

    alle kennen ja diese so gefuerchteten Memory-Leaks, wenn man (in C++) mit new angelegten Speicher nicht wieder mit delete frei gibt, weil dann dieser Speicher belegt ist aber nicht mehr benutzt wird. Nun wuerde mich aber mal interessieren, woran der PC (oder OS?) denn nun erkennt, welcher Speicher frei ist und welcher nicht? Am Wert der da steht kann es ja nicht liegen, da man, wenn man nach einem delete sich "aus Versehen" die dort befindlichen Daten nochmal ausgeben lasst unter Umstaenden passieren kann, dass man tatsaechlich die vorher dort gespeicherten Daten ausgegeben bekommt (oder etwa nicht?)

    Reine Interessefrage, ich werde jetzt zumindest noch nichts poraktisch mit dem Wissen damit anfangen. Hoffe es ist trotzdem jemand so nett mir das zu erklaeren.

    Vielen Dank im voraus

    Shinja



  • Da gibt es unterschiedliche Ansätze für. Ein guter Einstieg ist vielleicht http://herbert.wikispaces.com/DSA

    und der Wikipedia-Artikel http://en.wikipedia.org/wiki/Dynamic_memory_allocation



  • grob gesagt merkt man sich am anfang einfach den ganzen speicher als "leer" und bei jeder allokation "schneidet" man die angeforderte menge ab und das programm das speicher angefordert hat kann darueber verfuegen, bis es diesen speicher "freigibt" also wieder dem OS zur verfuegung stellt. das ist auch der grund fuer memory leaks, wenn ein programm einen speicherbereich nicht mehr nutzt, aber vergisst diesen "freizugeben", dann weiss das OS auch nicht, dass dort speicher rumliegt der neu vergeben werden koennte, also "leer" ist.

    dafuer gibt es natuerlich 1000+1 implementationsmoeglichkeiten.



  • Ok, vielen Dank. Lese mir mal den Wikipedia Artikel durch. Rapsos Erklaerung hat auch schon gut geholfen.

    Danke,

    Shinja


Anmelden zum Antworten