AGB  ·  Datenschutz  ·  Impressum  







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

Arbeitsspeicher läuft über - wie leeren

Ein Thema von Ykcim · begonnen am 19. Aug 2010 · letzter Beitrag vom 20. Aug 2010
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#31

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 15:25
Keine Ahnung, was Windows weiß. Jedenfalls steht der Adressraum eines nicht mehr existierenden, also beendenten Prozesses, wieder zur Verfügung. Oder hast du schon mal im Taskmanger belegten Speicher gesehen, der zu keinem Prozess mehr gehört?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
831 Beiträge
 
Delphi 10.4 Sydney
 
#32

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 15:37
@Teekeks
Danke, danke, danke, danke!!!!

Ich habe keine Ahnung, warum das auskommentiert war!

Aber das war die Lösung. Jetzt komme ich nicht mehr über 10MB -
auch nach x-maligen Ausführen!!!!


Nocheinmal DANKE - das Ihr drangeblieben bist!!!
Patrick

Geändert von Ykcim (19. Aug 2010 um 15:46 Uhr)
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#33

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 16:07
Auch wenn Du Dein Programm beendest,(und es sieht so aus das alles Frei gegeben wird), ist der Speicher noch reserviert!
Das ist barer Unsinn. Wo hast du das her? Wenn der Prozess beendet wird, dann wird der Adressbereich des Prozesses komplett wieder frei gegeben und steht anderen Programmen zur Verfügung. Und es spielt keine Rolle, ob du den von dir reservierten Speicher frei gibst oder nicht. Beim beenden räumt Windows hinter dir auf.
mh... War mir nicht so, das Windows erst den Speicher "richtig" freigibt wenn ein neuer Prozess speicher anfordert!? Sollte also mein Prog nach beenden noch mal gestartet werden, erspart sich Windows ne neue zuordnung von Speicher!? (schnellerer Programmstart) Oder verwechsle ich das jetzt mit was anderem

Aber wird nicht immer expliziet darauf hingewiesen, das ich selbst dafür verantwortlich bin, egal ob es ein Record, Objekt oder ein dynamisches Array ist, am Ende dafür zu sorgen, das es auch wieder frei gegeben wird? Dann kann man sich ja am Ende( das aufräumen sparen)
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
//freigeben von objekte
//dyn. Arrays
//records usw.
end
und ich stecke da immer so viel Arbeit rein
gruss alfold

Geändert von alfold (19. Aug 2010 um 16:09 Uhr)
  Mit Zitat antworten Zitat
Teekeks

Registriert seit: 19. Okt 2008
Ort: Dresden
765 Beiträge
 
FreePascal / Lazarus
 
#34

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 16:19
@Teekeks
Danke, danke, danke, danke!!!!

Ich habe keine Ahnung, warum das auskommentiert war!

Aber das war die Lösung. Jetzt komme ich nicht mehr über 10MB -
auch nach x-maligen Ausführen!!!!


Nocheinmal DANKE - das Ihr drangeblieben bist!!!
Bitte, Bitte.
Gern geschehen
Manchmal sieht man den Wald vor lauter Bäumen nicht
Peter
"Div by zero Error" oder auch: "Es geht auch ohne Signatur!".
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#35

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 19. Aug 2010, 16:48
mh... War mir nicht so, das Windows erst den Speicher "richtig" freigibt wenn ein neuer Prozess speicher anfordert!? Sollte also mein Prog nach beenden noch mal gestartet werden, erspart sich Windows ne neue zuordnung von Speicher!? (schnellerer Programmstart) Oder verwechsle ich das jetzt mit was anderem
Nein. Wird ein Prozess beendet, egal ob regulär oder durch den Taskmanager, wird der Adressraum wieder frei gegeben.

Zitat:
Aber wird nicht immer expliziet darauf hingewiesen, das ich selbst dafür verantwortlich bin, egal ob es ein Record, Objekt oder ein dynamisches Array ist, am Ende dafür zu sorgen, das es auch wieder frei gegeben wird?
Ja bist du, innerhalb des Programmes, also wenn dein Programm noch läuft, sonst müllst du dir den Speicher voll.

Zitat:
Dann kann man sich ja am Ende( das aufräumen sparen)
Könnte man. Ist aber kein sauberer Stil.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#36

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 20. Aug 2010, 01:20
Moin,
Auch wenn Du Dein Programm beendest,(und es sieht so aus das alles Frei gegeben wird), ist der Speicher noch reserviert!
Das ist barer Unsinn. Wo hast du das her? Wenn der Prozess beendet wird, dann wird der Adressbereich des Prozesses komplett wieder frei gegeben und steht anderen Programmen zur Verfügung. Und es spielt keine Rolle, ob du den von dir reservierten Speicher frei gibst oder nicht. Beim beenden räumt Windows hinter dir auf.
mh... War mir nicht so, das Windows erst den Speicher "richtig" freigibt wenn ein neuer Prozess speicher anfordert!? Sollte also mein Prog nach beenden noch mal gestartet werden, erspart sich Windows ne neue zuordnung von Speicher!? (schnellerer Programmstart) Oder verwechsle ich das jetzt mit was anderem[...]
Unwahrscheinlich. Weil wenn ich z.B. Notepad beende und dann eine neue Instanz starte, mache ich ja da nicht wieder weiter. Und um herauszufinden, welche Daten weiter genutzt werden könnten, ist eh alles wieder geladen. Ich glaube du meinst eher den Cache in der Festplatte. Aber da hat da Betriebssystem nur entfernt mit zu tun und im idealfall gar nicht.

[...]Aber wird nicht immer expliziet darauf hingewiesen, das ich selbst dafür verantwortlich bin, egal ob es ein Record, Objekt oder ein dynamisches Array ist, am Ende dafür zu sorgen, das es auch wieder frei gegeben wird? Dann kann man sich ja am Ende( das aufräumen sparen)[...]
Kann sein, dass ich mist erzähle, aber normalerweise speichert Windows ab: Der Prozess X hat die virtuelle Adresse V die auf die physikalische Adresse P abgebildet wird. Das heißt, wenn der Prozess X den Wert aus der Adresse V haben will, dann wird die Speicherzelle P aus den RAM oder Swap gelesen.
Nun ist das beim Programmende doch eigentlich so, dass er einfach die Tabelle für den Prozess X verwirft, und die Adresse P nicht mehr benutzt wird. Das da vorher Daten drin waren kann (i.d.R.) egal sein. Notfalls musst du am Anfang den Wert fest definieren.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 20. Aug 2010, 01:42
Windows weist dem virtuellen Addressraum des Prozesses reellen Speicher zu, wenn eswas angefordert wird (MSDN-Library durchsuchenVirtualAlloc und Co.)
und beim Beendes des Prozesses werden diese Zuweisungen einfach wieder freigegeben, es sei denn man hat den Speicher ge-shared und andere Prozesse haben auch noch eine Zuweisung ... Windows weiß also was welchem Prozess zugewiesen wurde.

SetLength führt Finalize/FinalizeArray und Initialize/InitializeArray für alle reservierten und freizugebenden Arrayfelder aus.
dynamische Arrays besitzen eine automatischen Speicherverwaltung/Initialisierung (ebenso wie Strings und Interfaces).
Wenn man also bei einem mehrdimensionalen Array das äußere Array freigibt, dann werden über Finalize die untergeordneten Arrays mit freigegeben.


Wärend der Programmlaufzeit muß man sich also "nur" um die nicht automatisch behandelten Speicheranfragen kümmer, wie Pointer und Objekte.

Wird ein Prozess beendet, dann räumt Windows auf ... gerade deswegen wurde ja mit der WinNT-Serie die virtuelle Speicherverwaltung eingeführt.
- Windows weiß wem was gehört und kann damit auch ordentlich aufräumen
- Prozesse haben getrennte Speicherräume und können sich nicht einfach gegenseitig beeinflussen (früher konnte ein BufferOverrun auch schonmal einen fremden Prozess schrotten und nicht nur den Eigenen).
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#38

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 20. Aug 2010, 03:46
Also ich habe jetzt noch Augenschmerzen vom Lesen des Sourcecode von Beitrag #7.
Bitte verwende doch eigene Prozeduren und Funktionen - dieser Spaghetticode ist ja nicht zum aushalten.
Auch wenn ein bestimmter Codeabschnitt nur einmal verwendet wird lohnt es sich doch diesen in eine Prozedure oder Funktion (genauer gesagt eine Methode) zu verpacken.
  Mit Zitat antworten Zitat
alfold

Registriert seit: 29. Jun 2010
Ort: Neustrelitz
393 Beiträge
 
Delphi 7 Enterprise
 
#39

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 20. Aug 2010, 12:54
Jo, soll ja keine grundsatz Diskusion werden
mh... War mir nicht so, das Windows erst den Speicher "richtig" freigibt ..... ?
Ich habe es wahrscheinlich verwechselt mit der Prefetch Funktion von Windows, habt also Nachsicht mit mir
Alles ander hatte ja @Lucki schon in einem Satz gesagt!

Sonst hat dieses Thema nichts mehr mit den Topic zu tun!

Gruss alfold
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#40

AW: Arbeitsspeicher läuft über - wie leeren

  Alt 20. Aug 2010, 15:46
Noch eine Bemerkung zum Aufräumen.
Ich hab das Gefühl, daß das Windows-Aufräumen etwas langsamer von Statten geht, als wenn Du es selbst machst.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 06:31 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