[gelöst] Wo wird eine Liste abgelegt

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Qnode
Beiträge: 67
Registriert: 19.07.2018 20:41
Computerausstattung: i5, 16GB RAM, Win10, PureBasic 6.00 (Windows - x64)

[gelöst] Wo wird eine Liste abgelegt

Beitrag von Qnode »

Hey,

wahrscheinlich habe ich ein Brett vor dem Kopf, aber alle Internetsuchversuche haben nichts gebracht. Ich will eigentlich nur wissen, wo PureBasic eine Liste ablegt. Auf dem Stack oder auf dem Heap. Eigentlich betrifft die Frage auch Maps bzw. die Speicherverwaltung allgemein.
Hintergrund der Frage ist, ob man relativ unbesorgt Listen mit großen Mengen Datensätzen/Strukturen anlegen und verarbeiten kann. Aus anderen Programmiersprachen kenne ich das so, dass viele Variablen standardmäßig auf dem Stack abgelegt werden und dieser eher begrenzt ist.

Ich hoffe, die Frage ist nicht zu blöd :oops: . Falls das Thema schon hundertmal behandelt wurde, wäre ich für einen Link auf das Thema dankbar. Ich habe echt nix Konkretes dazu gefunden...

LG
Qnode (seit heute glücklicher Besitzer der PureBasic-Vollversion)
Zuletzt geändert von Qnode am 03.08.2018 13:30, insgesamt 1-mal geändert.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Wo wird eine Liste abgelegt

Beitrag von Josh »

Help über Lists hat geschrieben:Sie können so viele Elemente hinzufügen wie Sie wollen (bzw. so viele, wie in den Speicher Ihres Computers passen)
Wenn du nicht gerade in einen Bereich von mehreren hundert Millionen Listeinträgen kommst, würde ich mir keine Gedanken darüber machen.

So weit ich weiß, werden Variablen nur im Stack abgelegt, wenn eine Prozedur aufgerufen wird. Das spielt aber dann auch nur eine Rolle, wenn die Prozedur immer wieder rekursiv aufgerufen wird. (Hoffe damit jetzt nicht zu viel Blödsinn geschrieben zu haben :mrgreen: )
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Wo wird eine Liste abgelegt

Beitrag von #NULL »

Die Liste selbst wird wohl auf dem Stack liegen wenn es eine lokale variable ist, weiß ich aber nicht. Wenn du aber eine Liste in einer Structure hast (die mit AllocateStructure() oder InitializeStructure() verwendet wird), dann liegt die vermutlich im Heap. In jeden Fall werden die Elemente selbst vermutlich auf dem Heap liegen! Und Listen haben auch ein eigenes Memory Management, so dass nicht jedes AddElement() einzeln alloziiert.
my pb stuff..
Bild..jedenfalls war das mal so.
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: Wo wird eine Liste abgelegt

Beitrag von NicTheQuick »

Alle dynamischen Daten wie Maps, LinkedLists und Arrays, die du mit Dim erstellst, werden natürlich auf dem Heap angelegt. Auch alles, was du mit AllocateMemory oder AllocateStructure anforderst, wird im Heap erstellt. Und dynamische Strings auch. Nur fixe Strings liegen auf dem Stack.
Auf den Stack gehören nur statische Variablen mit zur Übersetzungszeit bekannten Größen.

Code: Alles auswählen

; Auf dem Stack (relativ kleiner Pointerwert)
Define stack.i
Define stackString.s{5} = "Hallo"

Debug @stack
Debug @stackString

NewList l()

; Dieses Element wird auf dem Heap angelegt (viel größerer Pointerwert)
AddElement(l())
Debug @l()

; Dieser Speicherbereich ist auch auf dem Heap
Define *mem = AllocateMemory(100)
Debug *mem

Define heapString.s = "Hallo Welt"
Debug @heapString
Bild
Benutzeravatar
Qnode
Beiträge: 67
Registriert: 19.07.2018 20:41
Computerausstattung: i5, 16GB RAM, Win10, PureBasic 6.00 (Windows - x64)

Re: Wo wird eine Liste abgelegt

Beitrag von Qnode »

Vielen Dank. Damit ist meine Frage beantwortet.
Antworten