free versus delete



  • Hallo zusammen,

    ich hab nen Programm geschrieben, das auch lauffähig war.
    Nachdem ich dann im Source-Code entdeckt habe, dass ich Speicher, der mit
    malloc alloziert wurde, mit delete wieder freigegeben wurde.
    Warum läuft das dann? Zufall?
    Oder gibt es Beispiele, wo es egal ist, ob der Speicher mit delete bzw.
    free wieder freigegeben wird.
    Ist ein delete ein free mit vorherigem Destructor-Aufruf oder gibt es da
    noch einen anderen Unterschied?

    Gruß,
    MemoryFreeer



  • MemoryFreeer schrieb:

    Warum läuft das dann? Zufall?

    Zufall, Glück, implementationsbedingtes Verhalten - such dir eins aus

    Ist ein delete ein free mit vorherigem Destructor-Aufruf oder gibt es da
    noch einen anderen Unterschied?

    new/delete kann auf malloc/free aufbauen, muß es aber nicht - es kann also durchaus sein, daß es eine eigene Speicherverwaltung etabliert, die in einem ganz anderen Bereich arbeitet als malloc/free.

    (und außerdem - man kann "operator new" und "operator delete" sogar überladen, dann hat man wieder eine eigene Speicherverwaltung ;))



  • Cool, dass man den new und delete Operator überschreiben kann, wußte
    ich auch noch nicht...
    (Habs im Stroustroup gerade nachgelesen)

    Aber kann mir jemand mal nen anderen Anwendungsfall nennen als für eigene
    Speicherverwaltung?

    Gruß,
    MemoryFreeer



  • Stichwort Geschwindigkeit - du weißt, daß du sehr viele Objekte eines Typs benötigen wirst (und die dann nur für kurze Zeit), also willst du die häufigen new und delete Aufrufe abkürzen. Als Lösung könnte man new so einstellen, daß es zunächst in einer free-list nach freien Speicherblöcken sucht, bevor es neue anlegt, und delete packt den freigegebenen Speicher dann lediglich zurück auf die free-list.


Anmelden zum Antworten