AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Was passiert mit nicht freigegeben Objekten?
Thema durchsuchen
Ansicht
Themen-Optionen

Was passiert mit nicht freigegeben Objekten?

Ein Thema von xZise · begonnen am 8. Dez 2007 · letzter Beitrag vom 8. Dez 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

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

Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:23
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"?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:29
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:36
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?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:37
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

Re: Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:38
Zitat von Martin K:
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?
Du meinst Interfaces, dynamische Arrays und Strings - normale Objekte bleiben bestehen.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:39
Zitat von Dax:
Du meinst Interfaces, dynamische Arrays und Strings - normale Objekte bleiben bestehen.
Bis man sie zerstört oder das Programm schließt.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

Re: Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:40
Zitat von Martin K:
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?
Das ist falsch. Die Referenz geht verloren, aber der Speicher ist imme rnoch von dem Objekt belegt.

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.
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
 
#8

Re: Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:43
Nein xD
Das stimmt nicht 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 von Luckie:
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.
Wie kriegt man geöffnete Handles hin?

MfG
xZise

PS: Wussts ich doch xD
Miniaturansicht angehängter Grafiken
nofree_177.png  
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:49
Zitat von Luckie:
Das ist falsch. Die Referenz geht verloren, aber der Speicher ist imme rnoch von dem Objekt belegt.
Hmm, und ich dachte bisher, dass auch der Speicher freigegeben würde.
Guter Programmierstil ist es natürlich, alles was man erzeugt auch wieder freizugeben!
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Was passiert mit nicht freigegeben Objekten?

  Alt 8. Dez 2007, 14:50
Zitat von Apollonius:
Dein Lehrer hat eindeutig Unrecht.
Wenn der Lehrer aber imm noch auf Win 3.1 auf seinem Heimrechner hat, dann stimmt das Teilweise (jedenfalls für Ressourcen). Aber neuerer Windows-Versionen wissen was ein Programm für Ressurcen belegt und kann diese bei Beendigung
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 12:58 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