AGB  ·  Datenschutz  ·  Impressum  







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

:= NIL ist gleich release?

Ein Thema von Mavarik · begonnen am 27. Apr 2006 · letzter Beitrag vom 27. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#1

:= NIL ist gleich release?

  Alt 27. Apr 2006, 08:25
Hallo!

Ich lese öffter, das es in delphi möglich ist einfach einen Speicher wieder frei zu geben, indem man dem Zeiger auf NIL setzt.
Die C-Jungs müssen scheinbar noch manuell den release aufrufen?!

Ich rede nicht von .Net wo die Speicher-Abfallbeseitigung das erledigt

Habe ich da etwas verpasst? Oder wie funktioniert das?

Frank
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#2

Re: := NIL ist gleich free?

  Alt 27. Apr 2006, 08:30
Also ich war der Meinung das wenn man was = nil setzt, das dann die Variable zwar auf nil zeigt, das eigentliche Objekt doer was auch immer immernoch im Speicher existiert..
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: := NIL ist gleich free?

  Alt 27. Apr 2006, 08:34
Zitat von Angel4585:
Also ich war der Meinung das wenn man was = nil setzt, das dann die Variable zwar auf nil zeigt, das eigentliche Objekt doer was auch immer immernoch im Speicher existiert..
und genau das ist richtig. Nil nimmt nur den Pointer weg, der Speicherplatz ist noch immer belegt.
Ansgar
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: := NIL ist gleich free?

  Alt 27. Apr 2006, 08:43
Das Setzten auf Nil verschlimmbessert die Sache, weil nun die automatische Freigabe durch den Destruktor des Owner auch nicht mehr funktioniert, weil dieser meinet das Objekt sei schon zerstört, da Referenz NIL ist.
Markus Kinzler
  Mit Zitat antworten Zitat
dfried

Registriert seit: 16. Aug 2005
486 Beiträge
 
#5

Re: := NIL ist gleich free?

  Alt 27. Apr 2006, 08:46
Zitat von Mavarik:
Ich lese öffter, das es in delphi möglich ist einfach einen Speicher wieder frei zu geben, indem man dem Zeiger auf NIL setzt.
Naja, für Objekte wäre das nicht so toll (wie schon die anderen auch beschrieben haben). Bei Interfaces wäre diese vorgehensweise OK.
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: := NIL ist gleich free?

  Alt 27. Apr 2006, 08:48
Zitat von Mavarik:
Hallo!

Ich lese öffter, das es in delphi möglich ist einfach einen Speicher wieder frei zu geben, indem man dem Zeiger auf NIL setzt.
Die C-Jungs müssen scheinbar noch manuell den Free aufrufen?! Bzw. release.

Ich rede nicht von .Net wo die Speicher-Abfallbeseitigung das erledigt

Habe ich da etwas verpasst? Oder wie funktioniert das?

Frank
Hallo,

wenn das betreffende Objekt ein Interface implementiert (also z.B. eine Instanz eines COM-Servers ist) dann macht Delphi eine Referenzzählung. Das heisst, daß das Objekt freigegeben wird wenn die letzte Referenz auf NIL gesetzt wird, also von der Wirkung her wie bei dot-net-Objekten.

Bei "normalen" Objekten trifft das nicht zu. Diese müssen explizit freigegeben werden.

Ciao,
Ralf
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.142 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: := NIL ist gleich free?

  Alt 27. Apr 2006, 08:55
Zitat:
Hallo,

wenn das betreffende Objekt ein Interface implementiert (also z.B. eine Instanz eines COM-Servers ist) dann macht Delphi eine Referenzzählung. Das heisst, daß das Objekt freigegeben wird wenn die letzte Referenz auf NIL gesetzt wird, also von der Wirkung her wie bei dot-net-Objekten.

Bei "normalen" Objekten trifft das nicht zu. Diese müssen explizit freigegeben werden.

Ciao,
Ralf
OK Sorry! Natürlich geht es um interfaces!!

Wie funktioniert das? Wer zählt den da mit, wenn ein Pointer auf NIL gesetzt wird?

Frank

PS. Habe den Titel geändert!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: := NIL ist gleich free?

  Alt 27. Apr 2006, 09:55
Zitat von Mavarik:
Wie funktioniert das? Wer zählt den da mit, wenn ein Pointer auf NIL gesetzt wird?
Das ist Compiler-Magic. Der Compiler hat für Interfaces eine automatische Referenzzählung implementiert die dafür sorgt wenn der Referenzzähler auf 0 geht das das Objekt freigegeben wird. Ich denke wenn Du den Assembler-Code anschaust wird für eine einfache := Nil-Zuweisung noch einiges an Code aufgerufen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
xaromz

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

Re: := NIL ist gleich free?

  Alt 27. Apr 2006, 10:02
Hallo,
Zitat von Bernhard Geyer:
Ich denke wenn Du den Assembler-Code anschaust wird für eine einfache := Nil-Zuweisung noch einiges an Code aufgerufen.
So viel ist das nicht. Eigentlich wird nur _Release aufgerufen.
Nochmal zum Verständnis:
Jedesmal, wenn eine neue Referenz auf ein Interface erzeugt wird, sorgt Delphi dafür, dass die Methode _AddRef des Interface aufgerufen wird. Beim Entfernen der Referenz (auf nil setzen, Scope verlassen) wird automatisch _Release aufgerufen. Deshalb sind z. B. Funktionen mit einem try..Finally umgeben. Im Finally wird _Release für alle lokalen Referenzen aufgerufen.
Da das alles die Compiler-Magic macht, bekommt der Programmierer davon normalerweise nichts mit.

Gruß
xaromz
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: := NIL ist gleich release?

  Alt 27. Apr 2006, 10:19
Anmerkung string- und "array of"-Variablen werden genauso behandelt. Der einzige Unterschied ist das nicht die COM-Objekt-Referenzzaehlung sondern die Delphi-eigene Referenzzaehlung fuer diese Typen zum Zuge kommt.
  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 06:55 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