Deutsch
Forum

Struktur Speicherverbrauch

 

Jörg
Sellmeyer
Belegt eine Struktur eigentlich schon beim Definieren Speicher oder erst wenn ich sie mit Dim einem Bereich zuweise?
Ich vermute mal letzteres...

Gruß
Jörg
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
01.10.2006  
 



Welchen Speicher?
 
01.10.2006  
 



...außerdem hast du eine Möglichkeit vergessen - weder noch.

Ich nehme mal an, das DIM das selbe tut wie GlobalAlloc. Mal hier meine Beobachtungen als nicht Experte:
Was GlobalAlloc vor allem tut, ist ein Handle auf einen Speicherbereich zu holen. Virtueller Speicher kann nur Seitenweise zugewiesen werden. Eine Seite ist etwa 4kB groß. Wird weniger Speicher benötigt als 4kB, würde ja endlos Speicher verpulvert werden (das kann man zur Not mit TNT überprüfen).

Beim virtuellen Speicher ist es sogar so, das Seiten ja auch reserviert werden können - d.h. der virtuelle Speicher des Prozesses ist an dieser Stelle belegt, es können aber keine Daten dort gespeichert werden, da dieser Speicher keinem realen Speicher zugeordnet ist. Wird sich nun Speicher für eine variable geholt, wird der Speichermanager wohl erst mal diese Resourcen flüssig machen. Wie gesagt - bin kein Experte.

Ich würde also mal als vollkommener Nichtexperte sagen: Ob was und was da passiert, hängt von den Gegebenheiten im OS und im Prozess ab.

Declare dürfte eigentlich gar nicht spürbar etwas tun - ich glaube, wo das stattfindet, habe ich schon mit eigenen Augen (und TNT) gesehen.
 
01.10.2006  
 



Zum Überprüfen meiner Behauptungen habe ich mal folgenden Quelltext geschrieben:
KompilierenMarkierenSeparieren
Windowstyle 31
Windowtitle "Speicher bereitstellen"
Window 0,0-640,440
Declare var&
Waitinput
Print "Declare"
Declare Var#
Waitinput
Dim Var#,10000
LET VAR&=var#
Print "DIM"
PRINT var&
Waitinput
Dispose Var#
Print "Dispose"
Waitinput

Da hier auch die Adresse der Variablen ausgegeben wird (und in der Regel bei mehreren Starts immer die gleiche Adresse für die Variable genommen wird), kann man mit TNT sehr einfach vor der Deklarierung nachprüfen, ob der Speicher bereits zugewiesen war oder nicht:
Einfach den Prozess, den der Quelltext erueugt hat, markieren und mit Rechts im Treeview anklicken. Dann Infos über Adresse auslesen wählen und dort die Adresse des Variablen eingeben.
Das dürfte auch unter 95/98/ME funktionieren...
 
01.10.2006  
 




Jörg
Sellmeyer
Also nochmal:
Wird jetzt hier:
Struct Test = zahl&,Text$[1200]
schon der Bereich im virtuellen oder was auch immer Speicher belegt oder erst hier?
Declare Bereich#
Dim Bereich#,Test

Kann ich also beliebig viele Strukturen definieren, ohne daß sich auf den vom Programm verwendeten Speicher auswirkt?
Ist mehr ne theoretische Frage, aber ohne Neugier keine Erfahrung...
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
01.10.2006  
 



Belegt ist er ja evtl. schon. Wo evtl. Speicher verpulvert wird, sage ich dir gleich nochmal ganz genau - muß mal grad das OS wechseln. Normalerweise aber nur bei DIM.
 
01.10.2006  
 



OK, hab mit Mwatch nachgesehen - wenn es spürbares passiert, passiert es mit DIM und nicht mit Struct.
 
01.10.2006  
 




RGH
[quote:2174947e07=Andreas Hötker]OK, hab mit Mwatch nachgesehen - wenn es spürbares passiert, passiert es mit DIM und nicht mit Struct.[/quote:2174947e07]
Und das ist auch völlig logisch: Eine Strukturdefinition oder eine Klasse ist ja zunächst mal nur eine Typdefinition, eine Beschreibung eines Typs. Natürlich benötigt diese Beschreibung auch ein wenig Platz im Speicher, aber dieser ist minimal.

Erst ein DIM bzw NEW() bewirkt, daß die entsprechende Bereichsvariable den Speicher für die Struktur bzw. das Objekt belegt. Mit DISPOSE wird dieser Speicher wieder freigegeben.

Gruß
Roland
 
Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4
01.10.2006  
 




Jörg
Sellmeyer
[quote:cb23a979c2=RGH][quote:cb23a979c2=Andreas Hötker]OK, hab mit Mwatch nachgesehen - wenn es spürbares passiert, passiert es mit DIM und nicht mit Struct.[/quote:cb23a979c2]
Und das ist auch völlig logisch: Eine Strukturdefinition oder eine Klasse ist ja zunächst mal nur eine Typdefinition, eine Beschreibung eines Typs. Natürlich benötigt diese Beschreibung auch ein wenig Platz im Speicher, aber dieser ist minimal.

Erst ein DIM bzw NEW() bewirkt, daß die entsprechende Bereichsvariable den Speicher für die Struktur bzw. das Objekt belegt. Mit DISPOSE wird dieser Speicher wieder freigegeben.

Gruß
Roland[/quote:cb23a979c2]
Genau das wollte ich bestätigt haben, danke!
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
01.10.2006  
 



Wie gesagt: Ob überhaupt irgendetwas spürbares passiert....
 
01.10.2006  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

607 Betrachtungen

Unbenanntvor 0 min.
RudiB.17.08.2022
Christof Neuß11.10.2011

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

unbekannt (6x)
Jörg Sellmeyer (3x)
RGH (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie