[geklärt] Fragen zur Nutzung von Methode free

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Warf
Beiträge: 1908
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von Warf »

Erwin hat geschrieben:Ok, mal sehen, ob ich es jetzt langsam begriffen habe:
m.fuchs hat geschrieben:Genau. Wenn da eine Komponente (also nicht nil) übergeben wird, würde sich der TTimer dort anmelden. Und damit auch dafür sorgen, dass es später automatisch entsorgt wird.

Automatisch entsorgt wird? Also beim beenden des Programms? Dann geht es wohl vor allem darum, sicher zu stellen, dass nicht das Programm es versehentlich übersieht? Kommt so was öfter bei selbst erstelltem vor? Oder ist es eben Aufwendiger (und deshalb mit Fehler zu rechnen) weil der Formulareditor nicht richtig dabei mit einbezogen7informiert wurde?

m.fuchs hat geschrieben:Nein, wenn diese Komponenten einen Owner haben, dann solltest du dem auf keinen Fall dazwischengrätschen. Räum nur das weg, was du selber erzeugt hast. Aber nicht die Sachen, die im Formulareditor entworfen werden.

Mit erzeugen ist wohl in dem Fall gemeint, selbst erstellt. Nicht einfach aus der Komponenten-Palette was auf das Formular etc. erstellt zu haben? Und das bei der Erstellung kein Elternkomponente zugewiesen bekam?

Alles andere aus der Komponentenliste sollte man dann dem Programm/Formulareditor überlassen?
Zählt dazu auch einfache eigene Prozeduren und Funktionen?
Und wie sieht es mit Variablen, Arrays etc. aus?
StringList soll man ja wiederum selbst aufräumen, wenn ich das richtig verstanden habe? Anderseits gibt es dazu ja auch keine Komponente in der K-Leiste.


@ Warf, das ist ja irgendwie verwirrend, was da abgeht. Leider kann ich kaum Englisch. Und Technik-Englisch ... das dann gleich schon gar nicht.
Wenn ich Dich also richtig verstehe, sollte man mit der Nutzung von Free abschätzen, ob man die Komponente bald wieder braucht oder es länger dauert. Wenn man es bald wieder braucht, dann lieber vorerst stehen lassen. Nur wenn es länger dauert, sollte man Free nutzen. Und beim Programm beenden natürlich. So wie es bei den einen Spezielle Glühbirne, die beim Einschalten gleich dermaßen viel Strom brauchen, wofür eine normale eine Stunde davon leuchten könnte. Die Spezielle dann auszuschalten, wenn man in 10 Minuten eh wieder anmachen muss, würde da dann kein Sinn ergeben. Und Free für eine Komponenten (bzw. dessen Freigabe) zu nutzen, die man bald eh wieder braucht, würde für das BS-Speicher-System kein Sinn machen?


Ja genau. Zum Beispiel wenn du einen Filestream verwendest um eine Konfigurationsdatei zu lesen und zu schreiben, du Liest sie einmal beim Programmstart und schreibst beim beenden, dann lohnt es sich natürlich nicht das Objekt die ganze zeit zu behalten. Wenn du allerdings ein Logbuch schreibst, nach jeder Funktion oder so, dann lohnt es sich natürlich den Stream zu behalten (auch wenn Datenstream als Beispiel etwas schlecht ist, da Dateien öffnen wieder mal ne Sache für sich ist, aber ich denke du verstehst die Idee)

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fragen zur Nutzung von Befehl free

Beitrag von m.fuchs »

Warf hat geschrieben: kann ich dir das Buch Modern Operating Systems von Andrew S. Tanenbaum empfehlen. Die Quasi Standardlektüre wenn es um Betriebsysteme geht. In diesem Buch werden auch viele Beispiele aus dem BSD, Linux oder Windows Kernel angeführt. Hoch interessant, und dieses Jahr ist auch eine Neue Auflage rausgekommen, die sollte auch up to date sein mit der Aktuellen Technologie im Linux und Windows Kernel. Ist aber auf englisch (es gibt aber leider kein vergleichbares Werk auf Deutsch).

Es gibt eine Übersetzung: https://www.amazon.de/Moderne-Betriebss ... 86894270X/
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von m.fuchs »

Erwin hat geschrieben:Ok, mal sehen, ob ich es jetzt langsam begriffen habe:
m.fuchs hat geschrieben:Genau. Wenn da eine Komponente (also nicht nil) übergeben wird, würde sich der TTimer dort anmelden. Und damit auch dafür sorgen, dass es später automatisch entsorgt wird.

Automatisch entsorgt wird? Also beim beenden des Programms?

Nicht beim Beenden des Programms, sondern wenn der Owner entsorgt wird. Was in den meisten Fällen bei Beenden des Programm passieren wird, aber eben nicht zwingend nur dort.

Erwin hat geschrieben:Dann geht es wohl vor allem darum, sicher zu stellen, dass nicht das Programm es versehentlich übersieht? Kommt so was öfter bei selbst erstelltem vor? Oder ist es eben Aufwendiger (und deshalb mit Fehler zu rechnen) weil der Formulareditor nicht richtig dabei mit einbezogen7informiert wurde?

Es gibt kein versehentliches Übersehen. Ich beschreibe mal in einem Beispiel, wie das mit dem Automatismus läuft.

Du hast ein GUI-Programm mit Lazarus erstellt. Es enthält ein Form1. Auf diesem liegt wiederum ein Button1, der per Formulareditor hinzugefügt wurde.
Das Programm startet. Im Speicher wird nun automatisch ein Application-Objekt erzeugt. Dann wird das Form1 erzeugt und dabei als Owner Application eingetragen. Form1 meldet sich nun bei Application und sagt "Application, I am your child" (an dieser Stelle bitte eine dramatische StarWars-Melodie summen). Application trägt nun Form1 in seine Liste der Kinder ein.
Während Form1 erzeugt wird, werden auch alle Komponenten die da drauf liegen erzeugt. So auch Button1. Gleiches Spiel wie eben, Button1 erhält Form1 als Parent, meldet sich dort, Form1 nimmt ihn in die Liste der Kinder auf.
Das Programm läuft und programmatisch wird Timer1 erstellt. Mit folgendem Code:

Code: Alles auswählen

Timer1 := TTimer.Create(nil)

Timer1 bekommt als nil als Owner zugewiesen. Da der Timer1 nicht doof ist, weiß er dass nil nix ist und er keinen Owner hat. Also muss er auch niemanden von seiner Existenz benachrichtigen und steht somit auf keiner Liste.

Nun wird das Programm beendet. Dabei wird das Application-Objekt angewiesen sich selbst zu zerstören. Application möchte nicht alleine sterben, holt die Liste seiner Kinder heraus und gibt die Suizid-Anweisung weiter. Unter anderem an Form1, welches seine eigene Liste konsultiert und auch Button1 die Selbstzerstörung anträgt. Und so geben alle nacheinander ihren Speicher wieder frei.
Timer1 hingegen steht auf keiner Liste und dümpelt bis zum Programmende im Speicher herum. Dann schmeißt ihn die Clean-Routine des Betriebssystems raus.



Erwin hat geschrieben:
m.fuchs hat geschrieben:Nein, wenn diese Komponenten einen Owner haben, dann solltest du dem auf keinen Fall dazwischengrätschen. Räum nur das weg, was du selber erzeugt hast. Aber nicht die Sachen, die im Formulareditor entworfen werden.

Mit erzeugen ist wohl in dem Fall gemeint, selbst erstellt. Nicht einfach aus der Komponenten-Palette was auf das Formular etc. erstellt zu haben? Und das bei der Erstellung kein Elternkomponente zugewiesen bekam?

Genau.

Erwin hat geschrieben:Alles andere aus der Komponentenliste sollte man dann dem Programm/Formulareditor überlassen?

Ja.

Erwin hat geschrieben:Zählt dazu auch einfache eigene Prozeduren und Funktionen?

Die liegen in einem anderen Speicherbereich, der auch anders behandelt wird. Da machst du nichts dran.

Erwin hat geschrieben:Und wie sieht es mit Variablen, Arrays etc. aus?

Wenn du mit Variablen keine Objekte (also Instanzen einer Klasse) meinst, dann musst du dich um die auch nicht kümmern. Ebenso um Arrays

Erwin hat geschrieben:StringList soll man ja wiederum selbst aufräumen, wenn ich das richtig verstanden habe? Anderseits gibt es dazu ja auch keine Komponente in der K-Leiste.

Genau, eine von dir erzeugt StringList solltest du wieder wegräumen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von kupferstecher »

m.fuchs hat geschrieben:Es gibt kein versehentliches Übersehen. Ich beschreibe mal in einem Beispiel, wie das mit dem Automatismus läuft.
[...]
Dann schmeißt ihn die Clean-Routine des Betriebssystems raus.

Erwin, lies dir dieses Beispiel genauest durch, es steht eigentlich alles darin.

Bleibt die Frage wozu das Ganze, wenn doch das Betriebssystem sowieso nach Programmende aufräumt.
Für statische Programme, ist das auch alles nicht relevant. Ein Beispiel wo das Aufräumen unverzichtbar ist: Webbrowser. Beim Aufruf einer Seite ordnet der Browser alle Elemente der Webseite als Controls an (Textfelder, Buttons, Linien, Graphiken, etc.). Diese Controls müssen natürlich zur Laufzeit erzeugt werden, da vor Seitenaufruf noch gar nicht bekannt ist, wie viele Elemente, z.B. Buttons, auf der Seite sind. Geht man auf die nächste Seite werden wieder die benötigten Elemente erzeugt. Würde man die alten Elemente im Speicher nicht Aufräumen, dann würde man nach ein paar Minuten Surfen den Speicher sprengen.

Selbst wenn man in einem Programm mit massiver dynamischer Speichernutzung unbenutzen Speicher wieder aufräumt, kann es zu Speicherlecks kommen, wenn man einige Elemente vergisst, die wiederholt erzeugt werden. Und hier hilft das angesprochene HeapTrc, das den verbleibenden angeforderten Speicher zum Programmende auflistet. Das hilft dann aber nur, wenn man den ganzen manuell angeforderten Speicher wieder zurückgegeben hat, auch wenn er über die gesamte Programmlaufzeit benötigt wurde. Der verbliebene Speicher muss also null sein. Heaptrc berücksichtigt nur dynamischen Speicher. Für den Programmierer relevant sind Klasseninstanzen (class) und über Poiner angeforderter Speicher (New()). Strings und Arrays belegen zwar auch dynamischen Speicher, aber darum kümmert sich vollständig der Compiler.

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von Erwin »

@ m.fuchs, danke für den Titel des Übersetzten Buches. Aber Amazon? Nein, danke.

m.fuchs hat geschrieben:Nun wird das Programm beendet. Dabei wird das Application-Objekt angewiesen sich selbst zu zerstören. Application möchte nicht alleine sterben, holt die Liste seiner Kinder heraus und gibt die Suizid-Anweisung weiter. Unter anderem an Form1, welches seine eigene Liste konsultiert und auch Button1 die Selbstzerstörung anträgt. Und so geben alle nacheinander ihren Speicher wieder frei.
Timer1 hingegen steht auf keiner Liste und dümpelt bis zum Programmende im Speicher herum. Dann schmeißt ihn die Clean-Routine des Betriebssystems raus.

Bis zum Programmende? Wird also doch beim Beenden des Programms beendet bzw. der Speicher wieder frei gegeben? Zwar nicht allein vom Programm, aber mit Hilfe des BS, der dann merkt, dass da was vergessen würde, zu bereinigen? Dann muss man Free nur dann Anwenden, wenn man eine selbst erzeugte Application in einem Programm nur ganz selten braucht. Es aber am Schluss (HForm.OnClose) dennoch selber aufzuräumen, gehört dennoch zum gutem Programmierstil, weil sich sonst auch das BS mit darum bemühen müsste?

Glaube jetzt habe ich es im groben Verstanden. Langsam begreife ich auch, wieso das fast jedes Buch ignoriert.

Unter Projekteinstellungen/Debuggen/Andere-Debugger-Optionen brauche ich dann zum Überprüfen, nur einen Hacken bei 'Heaptrc-Unit' machen, der überprüft dies dann eh, oder? Dann muss ich mir nicht selber den Kopf zerbrechen, ob ich eine eigene Applikation geschaffen habe, weil der Teilt mir das in dem Fall dann schon mit?
Lazarus 2.2.0 / FP 3.2.4

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von m.fuchs »

Erwin hat geschrieben:@ m.fuchs, danke für den Titel des Übersetzten Buches. Aber Amazon? Nein, danke.

Kann man ja auch woanders kaufen.

Erwin hat geschrieben:Bis zum Programmende? Wird also doch beim Beenden des Programms beendet bzw. der Speicher wieder frei gegeben? Zwar nicht allein vom Programm, aber mit Hilfe des BS, der dann merkt, dass da was vergessen würde, zu bereinigen?

Das Betriebssystem merkt nicht ob da was vergessen wurde oder nicht, es räumt einfach den zugeteilten Speicher für das Programm ab. Ob und was da noch belegt ist, ist egal.

Erwin hat geschrieben:Dann muss man Free nur dann Anwenden, wenn man eine selbst erzeugte Application in einem Programm nur ganz selten braucht.

Du bringst hier Begriffe durcheinander. Nicht Application, das sollte es nur einmal geben, sondern Objekt (also Instanz einer Klasse). Und nur ganz selten braucht ist kein Kriterium. Selbst erzeugte Objekte sollten freigegeben werden wenn man sie nicht mehr benötigt. Und zwar so früh wie möglich.

Erwin hat geschrieben:Es aber am Schluss (HForm.OnClose) dennoch selber aufzuräumen, gehört dennoch zum gutem Programmierstil, weil sich sonst auch das BS mit darum bemühen müsste?

Das hat nichts mit dem OS zu tun, das sucht nicht nach Speicherleichen wenn ein Programm beendet wird. Objekte (so früh wie möglich) wieder abzuräumen hat mehrere Gründe:

  1. Disziplin - Wenn man darauf achtet immer aufzuräumen, ist die Wahrscheinlichkeit geringer es irgendwo zu vergessen.
  2. Zukunftsfähigkeit I - Du hast heute eine Methode die ein Objekt erzeugt und es nicht wieder zerstört. Die Methode wird ein einziges Mal aufgerufen, das Leck ist also recht klein. Und du denkst du kannst es vernachlässigen. In zwei Jahren baust du deinen Quellcode um und die Methode wird 100.000 mal aufgerufen. Dass du damals geschludert hast, hast du längst vergessen. Jetzt wird es aber richtig teuer.
  3. Zukunftsfähigkeit II - Dein Programm liest Datensätze ein und erzeugt jedes Mal ein kleines Objekt, welches nicht weggeräumt wird. Plötzlich will ein Kunde statt der üblichen 10 Datensätze pro Tag, den Bestand der letzten zehn Jahre einlesen. 36.500 Datensätze -> Kabumm.
  4. Zukunftsfähigkeit III - Dein Programm läuft normalerweise nur eine Stunde. Nun lässt dein Kunde es aber seit einer Woche laufen. Die Speicherlecks wachsen stetig an.
  5. Hilfe bei Fehlersuche - Du willst ein Speicherleck mit HeapTrc finden. Der Output ist aber tausende Zeilen lang. Denn dir wird nicht nur das eine Leck angzeigt, sondern auch noch die hundert anderen in deinem Projekt.


Erwin hat geschrieben:Unter Projekteinstellungen/Debuggen/Andere-Debugger-Optionen brauche ich dann zum Überprüfen, nur einen Hacken bei 'Heaptrc-Unit' machen, der überprüft dies dann eh, oder? Dann muss ich mir nicht selber den Kopf zerbrechen, ob ich eine eigene Applikation geschaffen habe, weil der Teilt mir das in dem Fall dann schon mit?

Wieder sagst du eigene Applikation, darum geht es nicht. Nur um eigene Objekte die nicht in irgendwelchen Listen zum automatischen Aufräumen vermerkt sind. Ja, HeapTrc hilft dir die Probleme auzuspüren. Idealerweise entstehen diese Probleme aber gar nicht erst.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von Erwin »

m.fuchs hat geschrieben:Das Betriebssystem merkt nicht ob da was vergessen wurde oder nicht, es räumt einfach den zugeteilten Speicher für das Programm ab. Ob und was da noch belegt ist, ist egal.

Oder so. Aber zumindest kann man sich sicher sein, dass nach dem Beenden dann alles wieder frei wird.


m.fuchs hat geschrieben:Du bringst hier Begriffe durcheinander. Nicht Application, das sollte es nur einmal geben, sondern Objekt (also Instanz einer Klasse). Und nur ganz selten braucht ist kein Kriterium. Selbst erzeugte Objekte sollten freigegeben werden wenn man sie nicht mehr benötigt. Und zwar so früh wie möglich.

Du selbst hast Doch sogar in Fett-Schrift, um dafür zu sorgen, dass ich mir das ja merke, das Wort Application eingeführt: Application-Objekt. Und später war in dem Absatz von Application (ohne Objekt) die Rede. So nach dem Motto: Jetzt sage ich das Richtige Wort (Application) zusammen mit dem Falschen Wort (Objekt) und lasse dann beim zweiten mal das Wort Objekt weg, dann müsste er es begreifen.


m.fuchs hat geschrieben:
  1. Disziplin - Wenn man darauf achtet immer aufzuräumen, ist die Wahrscheinlichkeit geringer es irgendwo zu vergessen.
  2. Zukunftsfähigkeit I - Du hast heute eine Methode die ein Objekt erzeugt und es nicht wieder zerstört. Die Methode wird ein einziges Mal aufgerufen, das Leck ist also recht klein. Und du denkst du kannst es vernachlässigen. In zwei Jahren baust du deinen Quellcode um und die Methode wird 100.000 mal aufgerufen. Dass du damals geschludert hast, hast du längst vergessen. Jetzt wird es aber richtig teuer.
  3. Zukunftsfähigkeit II - Dein Programm liest Datensätze ein und erzeugt jedes Mal ein kleines Objekt, welches nicht weggeräumt wird. Plötzlich will ein Kunde statt der üblichen 10 Datensätze pro Tag, den Bestand der letzten zehn Jahre einlesen. 36.500 Datensätze -> Kabumm.
  4. Zukunftsfähigkeit III - Dein Programm läuft normalerweise nur eine Stunde. Nun lässt dein Kunde es aber seit einer Woche laufen. Die Speicherlecks wachsen stetig an.
  5. Hilfe bei Fehlersuche - Du willst ein Speicherleck mit HeapTrc finden. Der Output ist aber tausende Zeilen lang. Denn dir wird nicht nur das eine Leck angzeigt, sondern auch noch die hundert anderen in deinem Projekt.

Da blicke ich jetzt nicht durch. Ich erstelle ein Objekt. Ich nutzte das Objekt. Und jedes mal wenn ich das Objekt nutze, wird der Speicher voller und voller? Dachte, das geschieht nur dann, wenn man das Objekt erstellt?


m.fuchs hat geschrieben:... Ja, HeapTrc hilft dir die Probleme auzuspüren. Idealerweise entstehen diese Probleme aber gar nicht erst.

Da ich selber nicht zwingend weiß, was weggeräumt werden muss, und zu viel wegräumen dem Aufräumen des Formular dazwischen funken könnte, ist es in meinem Fall sicherer, von Heeptrc sagen zu lassen, was ich wegräumen muss.
Lazarus 2.2.0 / FP 3.2.4

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von m.fuchs »

Erwin hat geschrieben:Du selbst hast Doch sogar in Fett-Schrift, um dafür zu sorgen, dass ich mir das ja merke, das Wort Application eingeführt: Application-Objekt. Und später war in dem Absatz von Application (ohne Objekt) die Rede. So nach dem Motto: Jetzt sage ich das Richtige Wort (Application) zusammen mit dem Falschen Wort (Objekt) und lasse dann beim zweiten mal das Wort Objekt weg, dann müsste er es begreifen.

Nein, das hast du völlig falsch verstanden. Application ist ein Objekt (vom Typ TApplication), mein Beispiel arbeitet mit diesem Objekt. Aber es ist eben nur ein spezielles Objekt, und kein Synonym dafür.

Erwin hat geschrieben:Da blicke ich jetzt nicht durch. Ich erstelle ein Objekt. Ich nutzte das Objekt. Und jedes mal wenn ich das Objekt nutze, wird der Speicher voller und voller? Dachte, das geschieht nur dann, wenn man das Objekt erstellt?

Speicher wird belegt wenn ein Objekt erzeugt wird. In den Beispielen ist auch nichts anderes beschrieben.

Erwin hat geschrieben:Da ich selber nicht zwingend weiß, was weggeräumt werden muss, und zu viel wegräumen dem Aufräumen des Formular dazwischen funken könnte, ist es in meinem Fall sicherer, von Heeptrc sagen zu lassen, was ich wegräumen muss.

Die Erfahrung wird dir das einfacher machen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Wosi
Beiträge: 5
Registriert: Fr 3. Nov 2017, 13:02

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von Wosi »

Ich empfehle die das E-Book "Delphi Memory Management" von Dalija Prasnikar. Darin wird dir erklärt, wie das Speicher-Management funktioniert und wie man richtigerweise mit Speicher umgeht.
Der Großteil des Buches ist 1:1 auf FreePascal übertragbar. Ausgenommen sind lediglich die Bereiche bezüglich der NextGen-Compiler (= Delphi für iOS, Android und Linux), anonyme Methoden, sowie die Attribute [weak] und [unsafe]

https://www.artplussoftware.com/dalijap ... index.html

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von Erwin »

m.fuchs hat geschrieben:Speicher wird belegt wenn ein Objekt erzeugt wird. In den Beispielen ist auch nichts anderes beschrieben.

Ja, es war schon von der Erzeugung die Rede. Aber dachte nie daran, Objekte ... wie soll ich sagen ... eben nur in Ausnahmefälle zu erzeugen. Also nur wenn mir ein passendes Objekt fehlt. Aber gleich mehrmals? Also dann eher jedes einzeln dass ich dann auch ständig brauche. Per Schleife ... da wüsste ich nicht wieso ich so was machen sollte.
Hinzu kommt, dass eigenen Objekterzeugung fast in keinem Buch beschrieben ist, und von daher es für mich einfacher ist, bereits vorhanden Objekte die nicht perfekt passen, mit paar direkte Anpassungen passend zu machen. So habe ich zum Beispiel unter Windows, als ich ein Farbiges Button wollte, dann halt das Panel hergenommen. Wenn man was zu Objekten und selber erstellen suchte, fande ich in meine Bücher fast nichts. So fand ich in Lazarus-Buch dazu z.B. so was wie Objektpooling, wo man mehre eigenen Objekte ... sammeln kann? Aber keine Erklärung, wie man Objekte selber erstellt. Auch konnte ich aus dem Text zum Objektpooling nichts heraus lesen, wie dies wiederum geht. Sondern wird einfach nur erwähnt?

m.fuchs hat geschrieben:Die Erfahrung wird dir das einfacher machen.

Naja, da ich kaum eigene Objekte erstellen werde, weil es findet sich da kaum einfache Erklärung dazu, und selber brauche ich so was scheinbar kam, wird es eh kaum dazu kommen.
Einfach gesagt: In mein Fall wird Free vermutlich eh nicht benötigt werden.
Zumindest weiß ich jetzt einiges mehr. Danke.


Wosi hat geschrieben:Ich empfehle die das E-Book "Delphi Memory Management" von Dalija Prasnikar. Darin wird dir erklärt, wie das Speicher-Management funktioniert und wie man richtigerweise mit Speicher umgeht.
Der Großteil des Buches ist 1:1 auf FreePascal übertragbar. Ausgenommen sind lediglich die Bereiche bezüglich der NextGen-Compiler (= Delphi für iOS, Android und Linux), anonyme Methoden, sowie die Attribute [weak] und [unsafe]

Danke. Aber E-Book mag ich nicht. Werde mal beim Buchhändler nachfragen, ob es auch als Buch gibt. Aber inzwischen frage ich mich, ob es in meinem Fall wirklich Sinn macht, mich auch noch damit groß auseinander zu setzen?
Lazarus 2.2.0 / FP 3.2.4

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von m.fuchs »

Erwin hat geschrieben:Ja, es war schon von der Erzeugung die Rede. Aber dachte nie daran, Objekte ... wie soll ich sagen ... eben nur in Ausnahmefälle zu erzeugen. Also nur wenn mir ein passendes Objekt fehlt. Aber gleich mehrmals? Also dann eher jedes einzeln dass ich dann auch ständig brauche. Per Schleife ... da wüsste ich nicht wieso ich so was machen sollte.

Um objektorientiert zu programmieren. Objekte können viel mehr sein, als nur die Komponenten unter Lazarus.

Da du keinen Einstieg zum Thema Klassen/Objekte gefunden hast: https://de.wikibooks.org/wiki/Programmi ... l:_Klassen
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von Erwin »

m.fuchs hat geschrieben:Um objektorientiert zu programmieren. Objekte können viel mehr sein, als nur die Komponenten unter Lazarus.

Da du keinen Einstieg zum Thema Klassen/Objekte gefunden hast: https://de.wikibooks.org/wiki/Programmi ... l:_Klassen

Danke. Kommt mir aber irgendwie bekannt vor. Glaube auf der Seite war ich schon mal. Die Erklärung scheint mir wieder mehr für Jene zu sein, die bereits wissen, wie es geht, und einfach nur (also nicht zusätzlich, sondern nur) noch paar weiter Informationen wollen. Also eher von Experten für Experten gedacht zu sein.
Lazarus 2.2.0 / FP 3.2.4

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von m.fuchs »

Erwin hat geschrieben:
m.fuchs hat geschrieben:https://de.wikibooks.org/wiki/Programmierkurs:_Delphi:_Pascal:_Klassen

[...] Die Erklärung scheint mir wieder mehr für Jene zu sein, die bereits wissen, wie es geht, und einfach nur (also nicht zusätzlich, sondern nur) noch paar weiter Informationen wollen. Also eher von Experten für Experten gedacht zu sein.

Eigentlich nicht, dass ist schon die Einführung zu OOP. Wenn du da Verständnisschwierigkeiten hast, fehlen dir eventuell ein paar Pascal-Grundlagen.
Dann schau mal hier: http://www.marcocantu.com/epascal/German/default.htm
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Erwin
Beiträge: 286
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 22.04 / x86_64_linux-gtk 2 / L 2.2.0 / FPC 3.2.2

Re: Fragen zur Nutzung von Befehl/Methode free

Beitrag von Erwin »

m.fuchs hat geschrieben:Eigentlich nicht, dass ist schon die Einführung zu OOP. Wenn du da Verständnisschwierigkeiten hast, fehlen dir eventuell ein paar Pascal-Grundlagen.

Ich denke, nicht dass es um das fehlen eventueller Grundlagen geht. Sondern viel mehr darum, was die einzelnen Befehle, Methoden etc. dort zu suchen haben? Es wird einfach nur aufgelistet, aber nicht erklärt, wie damit innerhalb dieser Klasse, Objekt etc. umgegangen wird, und wieso. Vor über 8 Jahren habe ich mich Ca. 1/2 Jahr lang mit Python beschäftigt, und deshalb auch Bücher dazu gelesen. Da war eines dabei, das erklärte mir, wie man eigene Objekte in Python erstellt. Der hat das so toll erklärt, dass ich dann auch begriff, wie es unter Delphi/Lazarus dies funktioniert. Weil da hieß es nicht einfach nur, Methode kann man einfügen oder so ähnlich. Sondern wieso dies eingefügt wird, Wie es dann sich darin verhält. Was da dann anders mit der Methode etc. ist Einfach eben was es dort macht. Wie zum Beispiel offenes Feuer. Klar kann man das auch ins Haus tun. Aber erfüllt es dann den gleichen Sinn wie draußen? Kann man genau so damit umgehen? Worauf muss man dann achten.

Leider ist es eben über 8 Jahre her, und ich finde das Buch nicht mehr (weil vermutlich versehentlich entsorgt) und inzwischen das erlernte verlernt habe.
Lazarus 2.2.0 / FP 3.2.4

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2636
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: [geklärt] Fragen zur Nutzung von Methode free

Beitrag von m.fuchs »

Erwin hat geschrieben:Ich denke, nicht dass es um das fehlen eventueller Grundlagen geht. Sondern viel mehr darum, was die einzelnen Befehle, Methoden etc. dort zu suchen haben?

Hast du den Artikel (und seine weiterführenden Links) tatsächlich gelesen?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten