/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Memory leaks
Fra : Lasse Westh-Nielsen


Dato : 15-02-03 19:37

Hejsa

Jeg sidder og koder noget OpenGL med en Borland C++ 5.5.1 compiler på
Windows 2000.

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.

Men hvad værre er, når jeg lukker applikationen, bliver en del af den
hukommelse applikationen brugte ikke frigivet!?

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!

Hvordan kan det være den hukommelse ikke bliver frigivet?? Er det compileren
eller Windows 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...?

Mvh Lasse


--
<signature>
Lasse Westh-Nielsen
lasse@daimi.au.dk
</signature>





 
 
Trygleren [9000] (15-02-2003)
Kommentar
Fra : Trygleren [9000]


Dato : 15-02-03 20:25

> 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...?

Jo det skal det, men sådan er verden ikke altid =)
Jeg har en delløsning på dit problem. FreeRamXP Pro. Det er freeware og
bruges til at... frigive ram.

--
"Sic gorgiamus allos subjectatos nunc"
Lars 'Trygleren' Winther

www.hesteskelet.dk/newsgroup




Mogens Hansen (16-02-2003)
Kommentar
Fra : Mogens Hansen


Dato : 16-02-03 11:34


"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



Rasmus Christian Kaa~ (20-02-2003)
Kommentar
Fra : Rasmus Christian Kaa~


Dato : 20-02-03 09:24


"Lasse Westh-Nielsen" <lasse@daimi.au.dk> wrote in message
news:b2m1cj$c97$1@sunsite.dk...
> Hejsa
>
> Jeg sidder og koder noget OpenGL med en Borland C++ 5.5.1 compiler på
> Windows 2000.
>
> 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.
>
> Men hvad værre er, når jeg lukker applikationen, bliver en del af den
> hukommelse applikationen brugte ikke frigivet!?
>
> 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!
>
> Hvordan kan det være den hukommelse ikke bliver frigivet?? Er det
compileren
> eller Windows 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...?
>
> Mvh Lasse

Hvilke typer allokeringer har du leaks i? F.eks. kan Windows ikke finde ud
af at frigive hukommelse der ligger i shared-memory (altså hukommelse der
kan tilgås fra 2 adskilte processer/programmer). Det Windows normalt gør er,
at frigive al den hukommelse der tilhører den pågældende proces (og evt.
underprocesser).



Søg
Reklame
Statistik
Spørgsmål : 177491
Tips : 31966
Nyheder : 719565
Indlæg : 6408458
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste