E R L E D I G T Speicherbedarf von Structuren

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

E R L E D I G T Speicherbedarf von Structuren

Beitrag von Pure_Beginner »

Hallo zusammen,
hab mich durch die Suche gewälzt aber leider nichts passendes gefunden.
Da ich aber auch die fortgeschrittenen Themen erlernen möchte hier meine Frage.


Belegt eine Structure von Anfang an Speicher ?

Oder erst nach Ihrer Initialisierung ?

Wir der Speicher nach dem Aufruf von ClearStructure wieder frei ?


Beispiel:

Code: Alles auswählen

Structure KB
  Winkel.a
  Euroschrauben.a
  Kappen.a
  Laenge.i
  Breite.i
  Dicke.a
EndStructure


Procedure.i  p_KB()
  Static MyKb.KB

  With  MyKb
    \Winkel                 = 4
    \Euroschrauben          = 12
    \Kappen                 = 4
    \Laenge                 = 800
    \Breite                 = 300
    \Dicke                  = 19
  EndWith

  ProcedureReturn  @MyKb
EndProcedure

Define *testKB.KB = p_KB()

Debug *testKB\Winkel
Debug *testKB\Euroschrauben
Debug *testKB\Kappen
Debug *testKB\Laenge
Debug *testKB\Breite
Debug *testKB\Dicke

ClearStructure(*testKB, KB)

Ps.
Habe ich ClearStructure richtig verwendet ?
Mögliche Fehler in meiner Ausducksweise bitte ich zu entschuldigen und zu korrigieren.
Zuletzt geändert von Pure_Beginner am 28.07.2012 20:24, insgesamt 1-mal geändert.
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Speicherbedarf von Structuren

Beitrag von STARGÅTE »

Pure_Beginner hat geschrieben:Belegt eine Structure von Anfang an Speicher ?
Oder erst nach Ihrer Initialisierung ?
Die Definition einer Struktur (also Structure bis EndStructure) belegt selbst keinen Speicher, da diese Informationen nur für den Compiler selbst sind, wie er den Code aufbauen muss.

Sobald die Struktur aber benutzt wird (also hier in Form des Static MyKb.KB) wird bereits zu Ausführungsbeginn der Speicher für diese Variable (mit der Struktur) reserviert und bleibt es auch.

ClearStructure() gibt nicht den Speicher der Variable mit der Struktur selbst frei, sonden nur "Anhängsel" der Struktur wie Strings, Arrays, Lists, ... und leert den Speicher.

Dein ClearStructure(*testKB, KB) am Ende macht also nichts weiter als alles auf 0 zu setzten in der Variable MyKb.

Wenn du wirklich selber Speicher reservieren willst und freigeben willst, solltest du mit AllocateMemory und ggf. InitializeStructure() arbeiten. Sobald du aber Variablen definierst, ist der Speicher reserviert bis zum Ende.
Auch wenn du p_KB() zB garnicht aufrufen würdest (auf Grund der Static Definition).
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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: Speicherbedarf von Structuren

Beitrag von ts-soft »

STARGÅTE hat geschrieben:Sobald du aber Variablen definierst, ist der Speicher reserviert bis zum Ende.
Auch wenn du p_KB() zB garnicht aufrufen würdest (auf Grund der Static Definition).
Ergänzend: Solange die Variablen gültig sind. Die Aussage betrifft also nur Globale oder Static Variablen.
Lokale Variablen in einer Procedure geben Ihren Speicher beim Verlassen der Procedure frei.
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
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: Speicherbedarf von Structuren

Beitrag von Pure_Beginner »

Besten Dank für Eure Antworten,
das hilft mir schon weiter beim verstehen der Speicherverteilung.

An die Befehl AllocateMemory und InitializeStructure() traue ich mich bei meinem Kenntnisstand noch nicht heran, es ist aber gut zu wissen das es so etwas gibt.

nochmals besten Dank für die Fachkundige Auskunft die sogar ich verstanden habe.


Schönes Wochenende
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Antworten