Speicherverwaltung in Purebasic
Speicherverwaltung in Purebasic
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.
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.
Re: Speicherverwaltung in Purebasic
Purebasic räumt auf
Wie hier z.B. aus der Hilfe ersichtlich:
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
Re: Speicherverwaltung in Purebasic
Willkommen zurück.
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.
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.
- NicTheQuick
- Ein Admin
- Beiträge: 8679
- 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
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.
Re: Speicherverwaltung in Purebasic
Danke für die Erläuterungen!
Re: Speicherverwaltung in Purebasic
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.:
Speicherbereiche, die per AllocateMemory() oder AllocateStructure() reserviert wurden, existieren so lange bis sie per FreeMemory() oder FreeStructure() freigegeben oder das Programm beendet wurde.
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.
Speicherbereiche, die per AllocateMemory() oder AllocateStructure() reserviert wurden, existieren so lange bis sie per FreeMemory() oder FreeStructure() freigegeben oder das Programm beendet wurde.
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
Re: Speicherverwaltung in Purebasic
.....
wenn man natürlich externe Prozesse/Programme/Dämonen/geteilte Bibliotheken aufruft können evtl. Funktionen auch nach dem normalen Programmende existieren.
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
no Keyboard, press any key
no mouse, you need a cat
- 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
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.
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Re: Speicherverwaltung in Purebasic
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.
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.
And we're out of Beta, we're releasing on time.
- 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
Wenn Du auf AllocateMemory verzichtest, gibt es über kurz oder lang einen IMA. Kompilierst Du etwa ohne Debugger?
Der purefier in den CompilerOptionen sollte Dir helfen, Speicherfehler zu erkennen, aber der springt dann sofort an.
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.
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.