![]() |
Was passiert mit nicht freigegeben Objekten?
Hi DP,
ich bin etwas ratlos, was Windows mit Objekten macht, die es nicht freigibt. Nun ich denke mir: Sobald der Prozess beendet wurde (und damit alle dazugehörigen Threads), wird alles was der Prozess benötigt hat "freigegeben". Aber mein Informatiklehrer vertritt die Meinung, das der Speicherbereich (jedenfalls ohne Reboot) nicht mehr verfügbar ist. Ich hingegen frage mich, wie das gehen soll, weil irgendjemand müsste dann wissen, dass der Speicherbereich nicht mehr verfügbar ist. Er geht sogar weiter, dass genilt werden muss (also "FreeAndNil" bzw. "FObject.Free; FObject := nil")! Nun ist meine Frage, was passiert mit nicht freigegeben Objekten? MfG xZise PS: Objekte, die nicht bis zum Ende existieren, sollten natürlich immer freigegeben werden. PPS: Der Spezialfall Komponente ist ja nur: "Wenn FOwner freigegeben wird => alle Clients freigeben"? |
Re: Was passiert mit nicht freigegeben Objekten?
Dein Lehrer hat eindeutig Unrecht. Wenn der Prozess fertig ist, wird von Windows der gesamte Addressraum freigegeben, damit natürlich auch alle Objekte. Das selbe gilt für Handles, Windows dekrementiert automatisch deren Referenz-Zähler. Und Nillen ist natürlich vollkommen Quatsch - da es in Delphi keine Referenz-Zählung für Objekte gibt, ist dem Objekt völlig egal, ob es nocht Zeiger auf es gibt.
|
Re: Was passiert mit nicht freigegeben Objekten?
Ist es nicht sogar so, dass Objekte die in einer Methode (Prozedur oder Funktion) als lokale Variable sind und in dieser Methode erstellt werden auch am Ende dieser Methode wieder freigegeben werden, auch wenn man kein .Free o.ä. explizit aufruft?
|
Re: Was passiert mit nicht freigegeben Objekten?
Nein, das stimmt nicht. Wenn du als lokale Variable einen Pointer hast und in der Routine GetMem aufrufst, wird der Zeiger auch nicht automatisch wieder freigegeben.
|
Re: Was passiert mit nicht freigegeben Objekten?
Zitat:
|
Re: Was passiert mit nicht freigegeben Objekten?
Zitat:
|
Re: Was passiert mit nicht freigegeben Objekten?
Zitat:
Was die Freigabe des Speichers und Windows angeht, hat dein Lehrer unrecht. So bald ein Prozess beendet wurde, gibt Windows alles wieder Frei: Benutzer-Objekte, GDI-Objekte und den Adressraum. Einzig das Prozess-Kernel-Objekt kann nopch weiterbestehen, wenn andere Prozesse noch geööfnete Handles auf das Objekt haben. |
Re: Was passiert mit nicht freigegeben Objekten?
Liste der Anhänge anzeigen (Anzahl: 1)
Nein xD
Das stimmt nicht :D In einen mörderischen Sebstversuch, habe ich Windows mal wieder zum swappen gebracht xD (Siehe Anhang)!
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var sl : TStringList; i : Integer; begin sl := TStringList.Create; for i := 0 to MaxInt - 1 do sl.Add('1289704328423'); end; Zitat:
MfG xZise PS: Wussts ich doch xD |
Re: Was passiert mit nicht freigegeben Objekten?
Zitat:
Guter Programmierstil ist es natürlich, alles was man erzeugt auch wieder freizugeben! |
Re: Was passiert mit nicht freigegeben Objekten?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz