AGB  ·  Datenschutz  ·  Impressum  







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

TList - Fragen zur Speicherverwaltung

Ein Thema von LeoDD · begonnen am 12. Jan 2009 · letzter Beitrag vom 13. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
LeoDD

Registriert seit: 30. Jul 2003
43 Beiträge
 
Delphi 2010 Professional
 
#1

TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 16:18
Nach langer Suche hier im Forum und auch über Google sind bei mir noch ein paar Fragen zur Verwendung von TList offen.

Mir ist klar, dass TList nur Pointer speichert. Der Speicher, auf den die Pointer zeigen, muss manuell freigegeben werden bei Löschen eines Items.

Ich habe nun eine TList, die während der Laufzeit einmal gefüllt wird und dann nicht mehr verändert wird. Es gibt also keine Funktion, die ein Item entfernt oder die ganze Liste leert.

1. Was passiert mit dem Speicher der referenzierenden Pointer, wenn das Programm komplett beendet wird?
2. Wenn der Speicher nicht freigegeben wird, an welcher Stelle im Programm sollte ich die TList "disposen"?

Danke schonmal
Leo
Erst wenn man dreimal auf Holz klopfen will, stellt man fest, dass die Welt nur noch aus Plastik und Aluminium besteht.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 16:21
Zitat von LeoDD:
2. Wenn der Speicher nicht freigegeben wird, an welcher Stelle im Programm sollte ich die TList "disposen"?
Ein geeigneter "Ort" wäre, dieses im onClose Ereignis der Form vorzunehmen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 16:26
Zitat von Klaus01:
Ein geeigneter "Ort" wäre, dieses im onClose Ereignis der Form vorzunehmen.
Das kommt auf die "CloseAction" (OnCloseQuery) an! Wenn das Fenster nur ausgeblendet wird, könnte es ggf. falsch sein die Daten schon freizugeben. Ich würde an Deiner Stelle das "OnDestroy"-Ereignis verwenden.

Viele Grüße
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
LeoDD

Registriert seit: 30. Jul 2003
43 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 17:01
OK, also bei OnDestroy im Hauptformular.

Könnt ihr mir bitte noch kurz die Frage 1 beantworten? Wenn ich das Programm beende, wird dann der Speicher freigegeben oder bleiben die belegten Zellen auf immer und ewig (ok, bis zum nächsten Windowsstart ) belegt?
Erst wenn man dreimal auf Holz klopfen will, stellt man fest, dass die Welt nur noch aus Plastik und Aluminium besteht.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 17:04
Speicher manuell belegen und nicht wieder freigeben schafft wunderbare Memoryleaks.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 17:06
Der Speicher wird frei gegeben sobald der Prozess welcher den Speicher angefordert hat beendet ist.
Trotzdem solltest du dir so etwas nie angewöhnen!
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
DrTox

Registriert seit: 26. Dez 2008
4 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 17:08
das Betriebssystem reserviert für dein Programm Speicher (Heap,Stack,...), wird das Programm komplett beendet,
müsste das Betriebssystem den zugeteilten Speicher eigentlich automatisch wieder freigeben, also sind deine
Objekte wieder freigeben. Am besten sorge selbst dafür, dass alles wieder richtig freigeben wird!
  Mit Zitat antworten Zitat
LeoDD

Registriert seit: 30. Jul 2003
43 Beiträge
 
Delphi 2010 Professional
 
#8

Re: TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 17:12
Keine Sorge, ich möchte schon dafür sorgen, dass alles seine Ordnung hat, es war nur eine Verständnisfrage Danke für die Antworten.
Erst wenn man dreimal auf Holz klopfen will, stellt man fest, dass die Welt nur noch aus Plastik und Aluminium besteht.
  Mit Zitat antworten Zitat
flipdascript

Registriert seit: 20. Mai 2008
25 Beiträge
 
Delphi 2010 Professional
 
#9

Re: TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 17:16
Kann ich bestätigen. Der Speicher wird vom Betriebssystem automatisch beim verlassen des Programms freigegeben.
Nichsdestotrotz würde ich die Freigabe explizit in Destroy bzw. OnDestroy des Hauptformulars vornehmen.

Da Du Delphi 2007 benutzt kannst Du auch mal folgendes tun:

In den ProjektQuelltext (Project / View Source) folgendes direkt nach begin einfügen:
ReportMemoryLeaksOnShutdown := True

Du wirst nun beim Beenden des Programms auf alle Speicherlecks hingewiesen. Ziel sollte es sein das, egal wie viel man mit dem Programm arbeitet und egal wie lange es lief, am Ende keine Meldung über Speicherlecks kommen.

Sobald Du den Stand hast das keine Speicherlecks mehr angezeigt werden kannst Du mögliche Speicherlecks bei neuem Code schnell entdecken da nach einer Änderung dann ja plötzlich wieder Lecks auftreten
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: TList - Fragen zur Speicherverwaltung

  Alt 12. Jan 2009, 17:22
1. Bevor das Betriebssystem eingreift, arbeitet erstmal noch der Speichermanager von Delphi und gibt alles frei.
2. Den Speicher gibst du einfach frei, wenn TList.Free (also in Destroy) aufgerufen wird.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  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 16:26 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