"Lasse Westh-Nielsen" <lasse@daimi.au.dk> wrot
> Jeg har en masse memory leaks kan jeg se (via Task Manageren) når jeg
kører
> min applikation, og det er selvfølgelig noget skidt.
Ja - det er noget skidt.
Hvorfor rydder du ikke bare op ?
Det er normalt simpelt.
Et almindelige idiom til det er RAII (resource acquisition is
initialization), hvor man allokerer resourcen i et objekts constructor og
frigiver den i destructoren.
Se
The C++ Programming Language, Third Edition
Bjarne Stroustrup
ISBN 0-201-88954-4
side 364-367 (samme sidetal i Special Edition)
for en detaljeret beskrivelse.
> Men hvad værre er, når jeg lukker applikationen, bliver en del af den
> hukommelse applikationen brugte ikke frigivet!?
Du skriver memory-leak.
Jeg tror du skal finde årsagen i det bredere begreb "resource-leak" - hvor
memory-leak blot er een slags resource-leak.
En resource kan være mange forskellige ting som f.eks.
* En database transaction
* En netværksport
* Et fil-handle
* Et entry i en CORBA Naming Service
Alle resourcerne kan naturligvis forbruge hukommelse.
Desuden kan de været allokeret i andre processer end den process, der var
årsag til at den blev allokeret.
Der er ikke altid en en-til-en sammenhæng mellem levetiden af en process og
den maksimale levetiden for en resource, og derfor kan man ikke altid
automatisk frigive alle resource.
> Det fører så til, at efter et stykke tid med "skriv-compile-kør", så er
min
> hukommelse brugt og Windows crasher med et brag!
Det er da flot klaret af Windows
En applikation (der ikke kører med kerne priviligier) burde aldrig kunne
crashe et operativsystemet - det bør være omvendt, så operativsystemet kan
forhindre applikationen i at køre.
> Er det compileren
> eller Windows der er noget galt med?
Ud fra din beskrivelse, lyder det så afgjort som om det er din applikation
der er noget galt med!
> Jeg mener, en ting er vel memory leaks inde i min applikation, et andet er
> vel at OS'et burde geninddrive den hukommelse der ikke længere er i
brug...?
Hvordan kan OS'et generelt vide at resourcen ikke længere er i brug ?
For specifikke kategorier af resourcer kan man sagtens gøre rede for det.
Jeg har tidligere set Microsoft dokumenter, der omhyggelgt beskriver hvad
operativsystemet frigiver og hvad det ikke frigiver.
Mon ikke sådanne dokumenter fortsat findes ?
Venlig hilsen
Mogens Hansen