Am meinsten verbraucht man, wenn man "Byval" angeben (muss).
Dann ist Bascom nämlich gezwungen, die Variable in das "Frame" zu kopieren, und das kostet nun wirklich.
Bei "Byref" wird nur die Adresse der Variablen auf den (Soft)Stack gelegt.
Druckbare Version
Am meinsten verbraucht man, wenn man "Byval" angeben (muss).
Dann ist Bascom nämlich gezwungen, die Variable in das "Frame" zu kopieren, und das kostet nun wirklich.
Bei "Byref" wird nur die Adresse der Variablen auf den (Soft)Stack gelegt.
Hallo!Zitat:
Zitat von MeckPommER
+1
Da bin ich voll deiner Meinung. Optimieren sollte man erst dann, wenn es einen Grund zum Optimieren gibt. Und bis es soweit ist, hat man mit Prozeduren und Funktionen ordentlich strukturierten Code in der Hand, der sich leicht warten lässt.
Auch auf BYVAL sollte man erst verzichten, wenn es denn unbedingt notwendig ist. Denn ein BYVAL hat schon viele Programmierer vor Fehlern bewahrt. Wenn irgendwo in einer Funktion oder Prozedur eine globale Variable verändert wird, dann werden größere Programme ziemlich schnell unübersichtlich.
Übergebe die Daten die die Funktion braucht an die Funktion und gib die geänderten Daten zurück. Achte darauf, Funktionen und Prozeduren so zu gestalten, dass diese unabhängig von der Umgebung sinnvoll arbeiten können. Dann haben Funktionen und Prozeduren ihren Zweck erfüllt: Eine Aufteilung eines komplexen Gesamtprogrammes in kleine, weniger komplexe Teilprogramme.
mfg
Gerold
:-)
PS: Das soll nicht heißen, dass man nicht optimieren soll. Wenn man mehr Leistung braucht, dann ist es gut zu wissen, was man am Code verändern kann um vorhandene Leistungsengpässe zu umgehen. Man soll nur nicht von Anfang an die Ausführgeschwindigkeit optimieren. Erst recht nicht, wenn noch nicht sicher ist, ob es überhaupt einen Grund dafür gibt.
.
Keine Ahnung warum bei mir kein deutlicher Performance unterschied erkennbar ist... Ich habe Subs eigentlich sowieso nur verwendet um mein Programm in Kapitel zu unterteilen. Es werden auch maximal 8 Variablen - verteilt auf zwei word-arrays - zwischen den insgesamt 6 Subs übergeben. Einige Subs kümmern sich auch gar nicht um die anderen Subs und machen ihr eigenes Ding. Ist vielleicht noch nicht komplex genug für einen Performance Unterschied. Dabei ist mein Mega32 immerhin bis zur Hälfte gefüllt ;-)
Gerade bei Arrays gilt PicNicks Hinweis auf den Frame in besonderem Maße.
Mit Byref wird nur ein Pointer auf den Stack gelegt, mit Byval muss jedes Element des Arrays umkopiert werden
Aber ansonsten gebe ich Gerold schon recht.
Gruß
Rolf
man kann sich aber auch kaputtoptimieren ....
wenn ich mir da verschiedene meiner Listings anschau,
da ohne SUB oder FUNCTION zu werken würd mich doch
z.T. mächtig beschränken.
Kritisch ist halt da die Verwendung lokaler Variablen, das
bremst mächtig, ist aber schön komfortabel wenn man
Prozeduren in ne externe Datei auslagert und die dann bei
verschiedenen Programmen gemeinschaftlich nutzt ...
Aber das sind Philosophiefragen, da gibts kein schwarz oder weiß,
da gibts unzählige Grauabstufungen dazwischen