Seite 2 von 3

Re: Variablen + DLLs

Verfasst: 11.06.2011 17:02
von Bisonte
Da belegt man ihn doch.... wegen der länge.
Da wird doch speicher für reserviert, sonst würde es da nicht klappen.

Re: Variablen + DLLs

Verfasst: 11.06.2011 17:15
von H.Brill
Hab ich übersehen.
Mit dem @"irgendwas" ist es ja
eine schöne Sache, da man nichts
deklarieren braucht. Bei den DLL-
Funktionen, die keinen Speicher
beschreiben, klappt es wunderbar.
z.B.

Code: Alles auswählen

 IColumn(lv1, @"Name", 280, 0)
zur Spaltenbeschriftung.

Aber belassen wir es dabei. Wir wissen ja,
wie es funktioniert und vor allem, daß es funktioniert.

Re: Variablen + DLLs

Verfasst: 11.06.2011 18:05
von Frabbing
Der Speicher von Variablen wird normalerweise erst zur Laufzeit erstellt, wird bei PB auch so sein.

Re: Variablen + DLLs

Verfasst: 11.06.2011 18:09
von ts-soft
Frabbing hat geschrieben:Der Speicher von Variablen wird normalerweise erst zur Laufzeit erstellt, wird bei PB auch so sein.
Nein, ist nur bei Stringvariablen so, die der Stringmanager verwalten muss. Bei anderen Variablen wird
der Speicher sofort erstellt und wenn nichts angegeben mit 0 initialisiert, was bedeutet, das deren
Pointer niemals auf 0 zeigt und sofort verwendbar ist.

Code: Alles auswählen

Define string.s
Define wert.i
Debug @string
Debug @wert

Re: Variablen + DLLs

Verfasst: 11.06.2011 18:20
von ts-soft
H.Brill hat geschrieben:Hallo Frank,
Ist ja geil :
auch sowas mit 10 Zeichen geht :

Code: Alles auswählen

@"          "
Das ist eine Stringkonstante, keine Variable!
Nur zur Klarheit.

Re: Variablen + DLLs

Verfasst: 12.06.2011 12:53
von Frabbing
Bei anderen Variablen wird
der Speicher sofort erstellt
Mit sofort meinst du vor der Laufzeit der Exe?

Re: Variablen + DLLs

Verfasst: 12.06.2011 13:21
von ts-soft
Nein, beim start der Exe wird pauschal Speicher vom Heap angefordert, der dafür dann gleich genutzt
wird. Vorm start der Exe geht wohl schlecht :mrgreen:

Re: Variablen + DLLs

Verfasst: 12.06.2011 23:17
von Frabbing
Also doch im laufenden Betrieb... :mrgreen:
Vorm start der Exe geht wohl schlecht :mrgreen:
Selbstverständlich geht das, und ist sogar in der Assemblerprogrammierung auch üblich. Variablen werden normalerweise in einer der Datasektion zu der Exe gelinkt. Zur Laufzeit werden i.d.R. nur größere Speicherbereiche erzeugt, und auch das geschieht durchaus mitunter noch beim Linken in einer besonderen Datasektion.

Re: Variablen + DLLs

Verfasst: 12.06.2011 23:25
von ts-soft
Aha, ja dann weiß ich nicht genau wie PB das macht. Stringkonstanten werden auf jeden Fall in einer
Datasection angelegt, aber einfache Variablen?

Re: Variablen + DLLs

Verfasst: 13.06.2011 00:39
von Danilo
ts-soft hat geschrieben:Aha, ja dann weiß ich nicht genau wie PB das macht. Stringkonstanten werden auf jeden Fall in einer
Datasection angelegt, aber einfache Variablen?
Es gibt im PE-Format 2 verschiedene "DataSections", eine für initialisierte Speicherbereiche (Strings)
und eine für uninitialisierte Speicherbereiche. (Ich denke mal daß das bei anderen Formaten auch so ist.)
Letztere Section braucht keinen Platz in der .exe auf der Festplatte und wird vom Loader beim Start reserviert.
PB initialisiert diesen Bereich beim Start dann mit 0.
Lokale Variablen natürlich entsprechend auf dem Stack beim Einsprung in die Funktion.