Aktuelle Zeit: 28.02.2020 14:23

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Speicherbedarf von Struckturen auf dem Stack
BeitragVerfasst: 06.01.2020 21:45 
Offline

Registriert: 18.01.2013 18:56
Habe zwar eine Meinung hierzu, aber evtl. hat der Compiler eine andere ... . Hat sich jemand schon mal damit beschäftigt?

Nehmen wir mal an eine Struktur enthält Variablen (wie .i, .d etc.), Strings, Arrays von Variablen, Arrays von Listen, Maps oder Strukturen, Listen, Maps und Strukturen. Strukturen können wiederum das selbe enthalten.
Was belastet bei einer lokalen Variable den Stack und was "nur" den Betriebssystemspeicher.

Meine Vermutung, die Euch nicht beeinflussen soll:
Stack: Jedes Element der Struktur mit seiner Größe wobei String, Liste oder Map die Größe eines Pointer haben.
Der Rest geht ans Betriebssystem.
Anders formuliert, alles statische auf den Stack, von allem dynamischen nur jeweils ein Pointer.

Danke schon mal für alle zielführenden Beiträge.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Speicherbedarf von Struckturen auf dem Stack
BeitragVerfasst: 06.01.2020 22:21 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Es liegt nicht alles auf dem Stack...

Nur Variablen und Strukturen die in einer Prozedur mit Protected angelegt werden liegen auf dem Stack. Diese werden automatisch beim verlassen der Prozedur wieder freigegeben.

Die mit Global, Static, Define angelegen Variablen und Strukturen werden in lese- und schreibbare 'section data' abgelegt.

Die mit Threaded angelegten Variablen und Strukturen werden zur Laufzeit Speicher angefordert.

Arrays, Listen, Map werden zur Laufzeit Speicher angefordert. Auch wenn diese als Protected in Prozeduren angelegt werden.

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Speicherbedarf von Struckturen auf dem Stack
BeitragVerfasst: 06.01.2020 22:55 
Offline

Registriert: 18.01.2013 18:56
@mk-soft: Global und Static ist klar. Bist du Dir mit Define innerhalb einer Procedur wirklich sicher? Wenn ich die Procedur rekursiv verwende, kann die Variable in jeder Rekursionstiefe einen anderen Wert haben, weil sie nicht static ist.
"zur Laufzeit Speicher angefordert" heißt "nicht auf dem Stack"?
Wenn mit Protected eine Struktur erstellt wird, wie sieht es mit den enthaltenen Arrays/Listen/Maps aus?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Speicherbedarf von Struckturen auf dem Stack
BeitragVerfasst: 07.01.2020 00:25 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Nach ASM-Output mal grob...

Code:
Structure udtFoo
  iVal.i
  Map MyMap.i()
EndStructure

Procedure foo()
  Protected MyData.udtFoo ; <- Init Dynamic Structure - Values and Pointer to Map on Stack
  Define iVal = 200 ; <- Same us Proteced on Stack
 
  MyData\MyMap("1") = 100
 
  ProcedureReturn MyData\MyMap()
  ; Exit <- Free Structures and String
 
EndProcedure

r1 = foo()

Debug r1
Debug iVal

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf My Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye