Seite 1 von 1

E R L E D I G T Speicherbedarf von Structuren

Verfasst: 28.07.2012 13:24
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.

Re: Speicherbedarf von Structuren

Verfasst: 28.07.2012 18:47
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).

Re: Speicherbedarf von Structuren

Verfasst: 28.07.2012 19:03
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.

Re: Speicherbedarf von Structuren

Verfasst: 28.07.2012 20:23
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