Seite 1 von 1

[gelöst] Wo wird eine Liste abgelegt

Verfasst: 02.08.2018 18:45
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)

Re: Wo wird eine Liste abgelegt

Verfasst: 02.08.2018 19:10
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: )

Re: Wo wird eine Liste abgelegt

Verfasst: 02.08.2018 19:28
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.

Re: Wo wird eine Liste abgelegt

Verfasst: 02.08.2018 20:45
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

Re: Wo wird eine Liste abgelegt

Verfasst: 03.08.2018 13:30
von Qnode
Vielen Dank. Damit ist meine Frage beantwortet.