Speicherverwaltung in Purebasic

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Speicherverwaltung in Purebasic

Beitrag von gekkonier »

Was ich mich schon immer gefragt habe, es aber noch nie wagte.... oder so...

Verwendet ein von Purebasic kompiliertes Binary einen Garbage Collector, oder wird der Speicher anderartig verwaltet?

Mir gehts hier nicht um Leaks (das schaffte ich selbst bei manuellem Verwalten noch nicht....), sondern um die Suche nach einer Plattform für komplexere Soundsynthese (abseits von C, C++, Nim oder Rust - selbst Newlisp ist dafür geeignet, Common Lisp eher weniger, und auch kein Java oder ähnliches). Ich mag von vornherein blocking GC's aussen vor lassen.
Und... Nun ja, Purebasic mag ich halt sehr, deshalb die Frage.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Speicherverwaltung in Purebasic

Beitrag von Mijikai »

Purebasic räumt auf :)

Wie hier z.B. aus der Hilfe ersichtlich:
Alle verbliebenen reservierten Speicherblöcke werden automatisch freigegeben, wenn das Programm endet.
Alle verbliebenen reservierten dynamischen Struktur-Einträge werden automatisch freigegeben, wenn das Programm endet.
Alle noch offenen Fenster werden automatisch geschlossen, wenn das Programm endet
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Speicherverwaltung in Purebasic

Beitrag von RSBasic »

Willkommen zurück. :allright:

Bei den normalen PB-Funktionen (Window, Gadgets usw.) übernimmt PB die Speicherverwaltung selber bzw. gibt PB die offenen Handles (PB-IDs) automatisch beim Programmende frei. Falls du was anderes meinst, dann sorry.
Wie es während der Laufzeit aussieht, habe ich leider nicht so viele Informationen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Speicherverwaltung in Purebasic

Beitrag von NicTheQuick »

Purebasic hat keinen Garbage Collector. PB-eigene Objekte werden notfalls am Programmende wieder freigegeben, aber globale Resourcen, die du selbst alloziert hast, musst du selbst wieder freigeben, damit es zu keinen Speicherlecks kommt. Oder wenn du zum Beispiel irgendwo AllocateMemory() oder AllocateStructure() nutzt, solltest du auch nach der Nutzung wieder FreeMemory() bzw. FreeStructure() nutzen, sonst gibt es auch hier Speicherlecks.
Bild
Benutzeravatar
gekkonier
Beiträge: 314
Registriert: 20.04.2007 09:06
Wohnort: Wien

Re: Speicherverwaltung in Purebasic

Beitrag von gekkonier »

Danke für die Erläuterungen!
:praise:
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Speicherverwaltung in Purebasic

Beitrag von Sicro »

Beim Programmende wird alles, was noch nicht freigegeben wurde, automatisch freigegeben.
So steht es jedenfalls in der PB-Hilfe bei CloseFile(), FreeMemory(), FreeStructure(), FreeGadget(), FreeFont(), CloseFTP() usw.:
  • Alle noch offenen Dateien werden automatisch geschlossen, wenn das Programm endet.
  • Alle verbliebenen reservierten Speicherblöcke werden automatisch freigegeben, wenn das Programm endet.
  • Ein Gadget wird automatisch freigegeben, wenn etwas wie folgt passiert:
    • Das Fenster, welches das Gadget enthält, wird geschlossen.
    • Das übergeordnete Gadget (ContainerGadget(), PanelGadget() etc.) wird freigegeben.
    • Das Programm endet.
  • Alle bestehenden FTP-Verbindungen werden automatisch geschlossen, wenn das Programm endet.
  • usw.
Sind innerhalb einer Procedure Variablen erstellt worden, werden diese automatisch nach dem Ausführen der Procedure freigegeben, außer die Variablen wurden mit folgenden Befehlen erstellt: Static oder Global
Speicherbereiche, die per AllocateMemory() oder AllocateStructure() reserviert wurden, existieren so lange bis sie per FreeMemory() oder FreeStructure() freigegeben oder das Programm beendet wurde.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Speicherverwaltung in Purebasic

Beitrag von ccode_new »

.....
wenn man natürlich externe Prozesse/Programme/Dämonen/geteilte Bibliotheken aufruft können evtl. Funktionen auch nach dem normalen Programmende existieren.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Speicherverwaltung in Purebasic

Beitrag von ts-soft »

PureBasic Programme allokieren eine bestimmte grösse an Heap-Speicher, für Variablen, Strings, Handles, Memory usw. Dieser kann bei Bedarf vergrößert werden (AllocateMemory usw.). Wenn dieser Speicher nicht freigegeben wird, macht Windows dies automatisch am Programmende, so das PB da nichts mehr für tun muss. Diese Freigabe geschieht aber nicht unbedingt sofort!
Anders sieht es aus, bei per API angeforderten Speicher. Dieser ist entsprechend freizugeben.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Speicherverwaltung in Purebasic

Beitrag von diceman »

Wie wird das intern eigentlich geregelt, wenn ich auf AllocateMemoy() verzichte? Welche Nachteile entstehen mir dadurch? :?
Muß ehrlich sagen, bis jetzt habe ich den Befehl noch kein einziges Mal benutzt.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Speicherverwaltung in Purebasic

Beitrag von ts-soft »

Wenn Du auf AllocateMemory verzichtest, gibt es über kurz oder lang einen IMA. Kompilierst Du etwa ohne Debugger? :freak:
Der purefier in den CompilerOptionen sollte Dir helfen, Speicherfehler zu erkennen, aber der springt dann sofort an.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten