| |
|
|
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 ▲ |
|
|
|
|
| |
|
| |
|
|
|
| ...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. |
|
|
| |
|
|
|
| Zum Überprüfen meiner Behauptungen habe ich mal folgenden Quelltext geschrieben: KompilierenMarkierenSeparieren 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... |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
| OK, hab mit Mwatch nachgesehen - wenn es spürbares passiert, passiert es mit DIM und nicht mit Struct. |
|
|
| |
|
|
|
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....
|
|
|
| |
|
|