AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Was pasiert mit Speicherlecks

Ein Thema von Alexander Roth · begonnen am 4. Dez 2006 · letzter Beitrag vom 4. Dez 2006
Antwort Antwort
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#1

Was pasiert mit Speicherlecks

  Alt 4. Dez 2006, 14:00
Hallo,

was passiert eigentlich mit Speicherplatz den man nicht wieder freigibt?
Wenn man im IDE arbeitet? Wenn man es so als exe startet?
Bleibt es alles einfach zurück.


Tschüss

Alexander


PS: Jaaa, ich weis immer freigeben und das mache ich auch.
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Benutzerbild von H4ndy
H4ndy

Registriert seit: 28. Jun 2003
Ort: Chemnitz
515 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Was pasiert mit Speicherlecks

  Alt 4. Dez 2006, 14:04
AFAIK gibts Windows die von deinem Programm genutzten Resourcen wieder frei, nachdem es beendet wurde.
Speicherlecks dürfen als nur zur Laufzeit Probleme verursachen (EOutOfMemory ^^).
Manuel
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Was pasiert mit Speicherlecks

  Alt 4. Dez 2006, 15:54
ok. Das ist natürlich gut zu wissen.
Danke

Tschüss


PS: Gut dass es Wikipedia gibt: afaik
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Was pasiert mit Speicherlecks

  Alt 4. Dez 2006, 16:04
Also ich glaube ja nicht das das stimmt.

Denn dann würde sich der Ram ja nicht "Zumüllen" lassen.

wenn ich z.b. einen Mediaplayer laufen hab und den dann schliese gibt das system auf keinen Fall allen Speicher wieder Frei. ( was mir mein Ram überwachungstool anzeigt ).

Ich denke das funktioniert wenn überhaupt nur dann wenn der User nur statische Variablen hat. Wenn du aber hergehst und die Mega Pointer ketten aufbaust, habe ich so meine Zweifel das das Betriebsystem die Tatsächlich alle Freigeben kann wenn die exe geschlossen wird.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Was pasiert mit Speicherlecks

  Alt 4. Dez 2006, 16:15
Hallo,
Zitat von Corpsman:
Also ich glaube ja nicht das das stimmt.
Dein Glaube kann Tatsachen nicht verändern . Windows gibt tatsächlich sämtliche Ressourcen wieder frei. Gerade beim Speicher ist das ja auch einfach, die Adressen sind eh alle virtuell.

Das ist jedoch kein Freifahrtschein. Nur weil Windows hinter Dir herräumt, heißt das nicht, dass Du eine Sauerei veranstalten solltest.

Gruß
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#6

Re: Was pasiert mit Speicherlecks

  Alt 4. Dez 2006, 16:24
Zitat:
wenn ich z.b. einen Mediaplayer laufen hab und den dann schliese gibt das system auf keinen Fall allen Speicher wieder Frei. ( was mir mein Ram überwachungstool anzeigt ).
Unter Windows wird ein erheblicher Teil des Speichers auch als Cache verwendet, u.a. für den Datenträgercache. Wenn dein Mediaplayer 200MB an Dateien angefordert hat, kann es gut sein, dass die danach immer noch im Cache sind. Der Cache wird aber geleert, wenn ein anderes Programm den Speicher benötigt.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#7

Re: Was pasiert mit Speicherlecks

  Alt 4. Dez 2006, 16:26
Zitat von Corpsman:
Denn dann würde sich der Ram ja nicht "Zumüllen" lassen.
Hi,
dass ist gar nicht möglich. Die Ram-Überwachungtools werden wohl von den Ram-Entmüller-Tool-Herstellern produziert. Speicher wird von einem Prozess erzeugt und mit dessen Ende auch wieder freigegeben. Der Mediaplayer (und ein paar andere Programme) sind dabei etwas tiefer in das System von Windows verankert. So findet man einige Programme wie den IE oder eben MediaPlayer, die sehr viel flinker als die Konkurrenz starten, weil sie zum Teil beim Start vorgeladen werden (bzw. einzelne Bibliotheken, die mehrere Prozesse verwenden können). Natürlich sieht es dann bei der Freigabe ähnlich aus, ein paar Dinge, die auch für den nächsten Start benötigt werden können bleiben einfach mal im Speicher.

Mit statischen Variablen hat das mal gar nichts zu tun. In eigenen Programmen kann man sicher sein, dass spätestens mit dem Ende des Programms aller allozierter Speicher wieder als frei markiert wird. Der Nachteil daran Speicher nicht selbst frei zu geben (ein Speicherleck zu erzeugen) besteht einfach darin, dass der Speicher unnötig lange belegt ist. Gerade Windows98 hat hier gerne eine feste Grenze des virtuellen Speichers, was dann dazu führt, dass man den erwähnten Fehler sieht. Aber auch modernere Betriebssysteme profitieren nicht von Speicherleichen. Hast du z.B. viele Bilder die geöffnet werden oder Videos, so wird der RAM schnell gefüllt. Bei der Freigabe des hier allozierten Speichers kann dieser Bereich nun für andere Variablen verwendet werden. Vergisst man dies, muss erst das alte Datum aus dem Ram verdrängt werden (und Festplattenzugriffe kosten Zeit) und erst dann kann eine andere Variable den phy. RAM verwenden. Endet der Prozess, wird hier nun der komplette belegte Speicher frei gegeben (eben auch der virtuelle, der evtl. unnötig verdrängt wurde).

Wichtig ist es eigentlich nur zu wissen, dass Windows sich um den tatsächlich belegten Speicher kümmert. Wer wirklich im phy. RAM und wer im virtuellen landet ist alles Sache des OS. Es gibt da kaum Möglichkeiten Einfluss darauf zu nehmen. Dass es hier keine Engpässe gibt liegt an wirklich gut arbeitetenden Systemen, die sich u.A. halt merken wer welchen Speicher reserviert und diesen damit freigeben können, wenn der entsprechende Prozess nicht mehr läuft.

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: Was pasiert mit Speicherlecks

  Alt 4. Dez 2006, 17:07
Der vom Programm reservierten Speicher (RAM) wird am Ende wieder freigegeben ... das ist meistens so schonmal richtig.


Anders sieht es aber mit SharedMemory aus, solange der noch von irgendeinem anderem Programm verwendert wird ... er wird erst freigegeben, wenn alle Programme die darauf zugreifen beendet sind.

Dies gilt auch für den gemeinsamen Speicher in gemeinsam genutzten DLLs (wie die von Windows, also da wo auch die ganzen WinAPI-Funktionen drin sind), solange die DLLs den Speicher nicht einzeln für die Applicationen verwalten.

Was das "Zumüllen" des RAMs angeht ... es laufen ja noch genug andere Anwendungen, die dafür sorgen und sowas wie die FileCache spielt da auch noch mit.


PS: was die RAM-Entmüllprogramme angeht, da gibt es schon einige Threads dazu und das Fazit daraus, die sind selber Müll bringen keine wirkliche Verbesserung ... leßt da einfach nochmal genau nach
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz