Seite 3 von 4
Verfasst: 28.06.2006 20:34
von Kaeru Gaman
Code: Alles auswählen
xyz.l=5
Procedure a()
Shared xyz.l
EndProcedure
Procedure b()
Shared xyz.l
EndProcedure
Procedure c()
xyz.s
EndProcedure
Procedure d()
xyz.f
EndProcedure
xyz ist dieselbe Long im hauptprogramm, in a() und in b(). diese xyz ist in c() und d() unbekannt, hier wird eine lokale definiert, ein string in c() eine float in d().
shared bedeutet: "hallo, ich muss mal auf die variable des hauptprogramms zugreifen, obwohl die nich global is"
Verfasst: 28.06.2006 22:17
von AND51
OK, das habe ich verstanden. Stimmt, NUL, ich wollte eigentlich Protected statt Shared schreiben. Danke auch dir kaeru!

Verfasst: 29.06.2006 12:22
von Sicro
Zu diesem Thema habe ich auch eine interessante Frage.
Nehmen wir mal an, ich habe einen Code mit ein paar Prozeduren und
einer lokalen Variable außerhalb der Prozeduren. 2 der Prozeduren
benötigen Zugriff auf die lokale Variable.
Was wäre der Vorteil, wenn ich - anstatt die lokale Variable global zu
setzen - die Prozeduren, die Zugriff auf die lokale Variable
benötigen mit dem "Shared"-Befehl den Zugriff ermögliche?
Benötigt die Variable bzw. die Methode dann vielleicht weniger Arbeitsspeicher?
Mfg DerProgger
Verfasst: 29.06.2006 13:10
von Kaeru Gaman
> Methode
? meinst du Procedur? Methoden haben wir hier nicht, ist kein OOP
> Was wäre der Vorteil
die geSHAREDte variable ist nur in diesen Prozeduren bekannt - du kannst namenskonflikte mit variablen in Includierten Procedures ausschließen.
besonders (aber nicht ausschließlich) bei großen codemengen sind mögliche namenskonflikte das hauptargument gegen globale variablen.
Verfasst: 29.06.2006 13:34
von ts-soft
@DerProgger
In dem Beispiel wäre es sinnvoll, die Variablen an die 2 beiden Proceduren
als Parameter zu übergeben. Shared ist eher im Zusammenhang mit
Callbacks interessant!
Verfasst: 29.06.2006 20:05
von mk-soft
Ich habe Shared eigendlich nie benutzt. Habe ein wenig getestet und weiss jetzt ich wie Shared anwenden kann.
Code: Alles auswählen
Global y ; Variable Global anlegen
x = 2 ; im Hauptprogramm verfügbar
y = 1 ; Überall verfügbar
Procedure a()
Shared x.l ; Variable verbinden
Shared z.s ; Variable verteilt anlegen / gab es vorher nicht
Debug "Procedure a()"
Debug "Var X: " + Str(x)
Debug "Var Y: " + Str(y)
Debug "Var Z: " + z
x = 100
y = 200
z = "Hallo Welt"
EndProcedure
Procedure b()
Debug "Procedure b()"
Shared x.l ; Variable verbinden
Protected y.l ; Variable ist Lokal
Shared z.s ; Variable verbinden
Debug "Var X: " + Str(x)
Debug "Var Y: " + Str(y)
Debug "Var Z: " + z
EndProcedure
a()
b()
Debug "Hauptprogramm"
Debug "Var X: " + Str(x)
Debug "Var Y: " + Str(y)
Debug "Var Z: " + z
FF

Verfasst: 08.07.2006 18:54
von Sicro
Vielen Dank Kaeru Gaman, ts-soft und mk-soft,
nun ist mir die Sache klarer geworden.
@Kaeru Gaman
Das Wort habe ich wohl schlecht gewählt.
Mit Methode ist die Vorgehensweise gemeint.
Mfg DerProgger
Verfasst: 08.07.2006 19:26
von Kaeru Gaman
achso..
normalerweise wäre ich drauf gekommen, aber bei
> Benötigt die Variable bzw. die Methode dann vielleicht weniger Arbeitsspeicher?
dachte ich nun wirklich, du meinst mit Methode etwas, was wie eine Variable im computer liegt und Arbeitsspeicher braucht.
Shared sollte (vermute ich) ebenso speichersparsam sein wie Global,
da ja wirklich dieselbe variable angesprochen wird.
wenn du eine Variable als Argument an eine proc übergibst, wird eine
neue lokale var erzeugt, die kann ja auch ganz anders heißen.
Verfasst: 08.07.2006 20:13
von ts-soft
>> Shared sollte (vermute ich) ebenso speichersparsam sein wie Global,
Davon bin ich nicht so überzeugt. Lokale Variablen belegen nach verlassen
der Prozedure doch keinen Speicher mehr, abgesehen von mit Static
deklarierten. Für die Übergabe belegter Speicher wird doch beim Verlassen
der Prozedur auch freigegeben. Speicher für globale oder shared Variablen
wird jedoch nie freigegeben.
Ob ich jetzt richtig liege, hängt natürlich vom Compiler ab, ob der die
Speicherzuteilung für lokale Variablen zur Laufzeit erstellt, oder dieser bereits
bei der Compilierung erstellt wird. Das müßte aber jemand der ASM Gurus wissen

Verfasst: 08.07.2006 20:27
von Kaeru Gaman
> Für die Übergabe belegter Speicher wird doch beim Verlassen
der Prozedur auch freigegeben.
schön, aber während die procedur läuft, benötigt die variable dort speicher - plus den speicher, den die variable im hauptprogramm benötigt.
globale vars oder shared benötigen diesen speicher nur ein mal.
(wir reden nicht von werten, die man im funktionsaufruf berechnet, sondern über solche, die schon als variablen geführt werden, sonst wäre der vergleich mit 'global' gar nicht möglich)